4

一時テーブルを作成し、挿入し、選択してからドロップするストアドプロシージャを作成しました。SQL Server Management Studio内でストアドプロシージャを実行すると正常に機能し、期待どおりの結果が得られます。

CREATE PROCEDURE usp_TempTableTest
    -- Add the parameters for the stored procedure here
    @color VARCHAR(10)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    CREATE TABLE #tmptable (
        color VARCHAR(10)
    )

    INSERT INTO #tmptable (color) VALUES (@color)

    SELECT color FROM #tmptable

    DROP TABLE #tmptable

END
GO

ただし、インポート/エクスポートツールで作成し、そのストアドプロシージャをデータソースとして使用すると、次のエラーが発生します。

オブジェクト名'#tmptable'が無効です。

なぜこれが起こるのか考えていますか?これをテーブル変数に変更すると、インポート/エクスポートでは正常に機能するように見えますが、一時テーブルで機能しない理由がわかりません。

4

2 に答える 2

0

上記のような模倣されたストアドプロシージャをSSMSで実行すると、プロシージャで説明したようにデータが返されます。ただし、あなたが行ったように、を試してみると、それが削除される#tmptableため、同じエラーが発生します。DROP TABLE私の知る限り、インポート/エクスポートは基本的に最終INSERTプロセスです。テーブル変数で機能する理由は、データが最後の挿入にまだ存在するためです。の場合、そうではDROP TABLEありません。たとえば、を削除するDROP TABLEと機能します。

私はここで間違っているかもしれませんが、上記の手順の場合のインポートまたはエクスポートの場合のロジックは

INSERTデータ

SELECTデータ

DROPデータ

INSERT(インポート/エクスポート):これにより、「無効なオブジェクト名tmptable」が生成されます。

変数(またはno DROP)を使用すると、

INSERTデータ

SELECTデータ

INSERT(インポート・エクスポート)

2番目のケースでは、データはまだ存在しています。最初のケースでは、それらはなくなっています。#tmptableを使用する場合は、次の方法でコードを開始します。

IF OBJECT_ID('tempdb..#tmptable') IS NOT NULL DROP TABLE #tmptable
于 2013-02-13T20:46:38.430 に答える
0

「SET FMTONLY OFF;」を入れます。「SET NOCOUNT ON」のすぐ上

http://msdn.microsoft.com/en-us/library/ms173839.aspx

于 2014-12-22T18:18:42.383 に答える