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



基于这篇文章如何创建基于列数的临时表?我能够创建名称为#VarTemp的临时表。但是如何从执行存储过程中抽取数据呢?抛出错误

无效的对象名称'#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'.

您的临时表的作用域是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)

最新更新