2011-09-27 7 views
0
DECLARE @tmp_tab VARCHAR(20) 
SELECT @TMP_TAB = '#TMP_TAB_BANK' + CAST(USER_ID(USER) AS NVARCHAR) 
            + CAST(@@SPID AS NVARCHAR) 

EXEC('CREATE TABLE ' + @TMP_TAB + (ID INT NULL, NAME VARCHAR NULL)') 

//Break point 

EXEC('select * from ' + @TMP_TAB) 

私はSQL Server 2005で作業しています。上記のコードでは、私の一時テーブルの名前を決めることにしました。次に、私は一時テーブルを作成します。これらのコードを実行すると、Commands completed successfullyメッセージが届きます。正常に作成された#tempテーブルから選択できません

しかし、私は

無効なオブジェクト名「#TMP_TAB_BANK157」

なぜができないデータを取得するためのコード(だけでなく、私はそれが空であることを知っている)私が手の最後の行を実行した場合作成したテーブルからレコードを取得しますか?一時テーブルが作成されていない場合は、警告が表示されません。

答えて

3

#TEMPテーブルは、作成されたコンテキストからのみ使用できます.1つのspidまたは接続に#temp1を作成すると、他のスコープ(子スコープを除く)からはアクセスできません。

動的SQLで#TEMPテーブルを作成する場合は、同じスコープでテーブルを選択する必要があります。

代替は、以下のとおりです。自分のリスクを持って

  • ##GLOBAL一時テーブル、。
  • 実テーブル
関連する問題