2013-01-16 62 views
2

基於這篇文章how to create temp table based on column number?我可以創建名稱爲#VarTemp的臨時表。但是,如何從exec存儲過程抽取數據?它拋出錯誤從存儲過程插入數據到Temp表中

無效的對象名稱#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

見[這裏](http://stackoverflow.com/questions/5955074/whats-the-scoping-rule-for-temporary-tables-within-exec-within-stored-procedure)。 – HABO

回答

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) 
相關問題