2

基于这篇文章如何根据列号创建临时表?我可以用 name 创建临时表#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 回答