根据这篇文章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'.
答案 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)