MSSQLでストアドプロシージャを作成していますが、このストアドプロシージャ内にテンポラリテーブル(このテーブルを@TempTable
としましょう)を挿入し、その中にいくつかのものを挿入します。ここまでは順調ですね。しかし、このプロシージャの後の時点で、動的SQLを使用する必要があります。これは、プロシージャのいくつかのパラメータが既存の表の列名であるためです。 そして、この動的SQL文の中で、私は実際のテーブルのいくつかの値と@TempTable
動的SQL内のテンポラリテーブル
を比較する必要があるので、文は
DECLARE @SQLString nvarchar(500)
SET @SQLString = N'SELECT A.ColumnA FROM RealTable A, ' + @TempTable + ' B
WHERE A.' + @ColumnParameter + ' = B.ColumnA'
EXEC (@SQLString)
のように見えますが、この場合には、SQLは、@TempTable
がスカラー変数であると考えていますそれを宣言する必要があります。また、私はこのようにそれを試してみました:
DECLARE @SQLString nvarchar(500)
SET @SQLString = N'SELECT A.ColumnA FROM RealTable A, @TempTable B
WHERE A.' + @ColumnParameter + ' = B.ColumnA'
EXEC (@SQLString)
はしかし、この場合はもちろん、それはこれがテーブルであることを、知っていないため、宣言する必要があり@TempTableテーブル変数は、私はこの外に(以前に宣言しましたステートメント)。だから、私の質問は、どうやって動的SQL内のテンポラリテーブルを正しく使用するのですか?
あなたは、単にあなたが使用しているSQL Serverのどのバージョンの – Takarii
とその完成したら、それをドロップし、(一時的に)データベースに実際のテーブルとしてテーブルを宣言するだろうか? – gofr1
SQL Server 2008 R2 – Echelon