2

この投稿に基づいて、列番号に基づいて一時テーブルを作成する方法は?名前で一時テーブルを作成できます#VarTemp。しかし、どうすればexecストアドプロシージャからデータをポンプできますか?エラーをスローしています

無効なオブジェクト名'#VarTemp'

これは私のコードです:

DECLARE @ColCount int = 20
DECLARE @Ct int = 1
DECLARE @SQL nvarchar(max) = ''

SET @SQL = 'CREATE TABLE #VarTemp('

WHILE @Ct < @ColCount+1
BEGIN
    SET @SQL += 'Col' + CAST(@Ct as nvarchar(8)) + ' nvarchar(256),'
    SET @Ct = @Ct + 1
END
SET @SQL = LEFT(@SQL, (LEN(@SQL) - 1))
SET @SQL += ')'

Exec (@SQL)
INSERT into #VarTemp EXEC sp_FindStringInTable 'Nareshbhai%', 'dbo', 'aspnet_Membership'
 --- Get error Invalid object name '#VarTemp'.
4

1 に答える 1

6

一時テーブルのスコープはEXECコマンドです...そのステートメントが完了するとすぐに自動的に削除されます。

一時テーブルを動的に作成する場合は、同じ動的SQLステートメントで一時テーブルに挿入する必要があります...また、同じ動的SQLステートメントで一時テーブルから読み取る必要があります。

SET @SQL = 'CREATE TABLE #VarTemp('

WHILE @Ct < @ColCount+1
BEGIN
    SET @SQL += 'Col' + CAST(@Ct as nvarchar(8)) + ' nvarchar(256),'
    SET @Ct = @Ct + 1
END
SET @SQL = LEFT(@SQL, (LEN(@SQL) - 1))
SET @SQL += ')

INSERT into #VarTemp EXEC sp_FindStringInTable ''Nareshbhai%'', ''dbo'', ''aspnet_Membership''

SELECT * FROM #VarTemp
'

Exec (@SQL)
于 2013-01-16T21:59:40.630 に答える