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

Jam*_*123 2 sql t-sql sql-server stored-procedures

基于这篇文章如何根据列号创建临时表?我能用名称创建临时表#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'.
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 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)
Run Code Online (Sandbox Code Playgroud)