从存储过程将数据插入Temp表

时间:2013-01-16 21:54:43

标签: sql sql-server tsql stored-procedures

根据这篇文章how to create temp table based on column number?,我可以创建名为#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'.

1 个答案:

答案 0 :(得分:6)

您的临时表的范围是EXEC命令...一旦该语句完成,它将自动删除。

如果动态构建临时表,则必须在相同的动态sql语句中插入临时表...并且您还必须在相同的动态sql语句中读取它:< / p>

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)
相关问题