0

私はこのSQLServer2005パズルを持っています

次のコードは機能しません

 DECLARE @tmp TABLE  (ID  int IDENTITY PRIMARY KEY , strDateTime varchar(50)) 
 INSERT INTO @tmp VALUES('1/2/13') 

 DECLARE @x varchar(1000) 
 SET @x = 'SELECT * FROM ' + @tmp ;
 EXEC (@x) 

次のエラーが発生します

メッセージ137、レベル15、状態
2、5行目スカラー変数「@tmp」を宣言する必要があります。

私がこれをするなら

SET @x = 'SELECT * FROM  @tmp ' ;

このエラーが発生します

メッセージ1087、レベル15、状態2、行1
テーブル変数「@tmp」を宣言する必要があります。

私が本当にやろうとしていたのは、動的列名をselectステートメントに渡すことでしたが、それも気に入らなかったことがわかりました。

誰かが私が間違っていることを私に導くことができますか

ありがとう

4

1 に答える 1

4

テーブル変数は、それが作成されたスコープでのみ有効です

テーブル変数はローカル変数のように動作します。明確に定義されたスコープがあります。これは、で宣言されている関数、ストアドプロシージャ、またはバッチです。

これを行うには、一時テーブルを使用する必要があります。

 CREATE TABLE #tmp (ID  int IDENTITY PRIMARY KEY , strDateTime varchar(50)) 
 INSERT INTO #tmp VALUES('1/2/13') 

 DECLARE @x varchar(1000) 
 SET @x = 'SELECT * FROM #tmp';
 EXEC (@x) 
于 2013-02-13T20:14:34.243 に答える