2015-07-10 79 views
-1

我在SQL中使用了一個動態查詢,該查詢返回了一個需要插入臨時表的大型數據集。要將sp_executesql的結果插入臨時表中

是否 從EXEC中SELECT INTO #tmp sp_executesql @query work?

我沒有嘗試,但我得到一個錯誤EXEC‘

「關鍵字附近有語法錯誤:’我知道,它的工作原理採用插入,但我不希望手動創建表,因爲它是有很多列的大桌子。有沒有替代方法,而不必手動創建臨時表?

+1

[將存儲過程的結果插入臨時表中]的可能重複(http://stackoverflow.com/questions/653714/insert-results-of-a-stored-procedure-into-a-臨時表) – Siyual

+0

@Siyual我注意到了,但它看起來太複雜了,只是簡單地插入到表中。 – TheFallenOne

+0

您可以將select語句插入到您的商店proc中嗎? – Marcin

回答

0

不,它不工作,你不能這樣做。但是,解決方法是在動態SQL創建臨時表之前,並在動態SQL中插入該表。然後,當你完成後,你會填滿桌子。

+0

是的,我確實意識到它。除了創建100列的臨時表之外,無法想到任何其他選項。 – TheFallenOne

+0

我想你可以嘗試做一個選擇硬編碼來創建臨時表,不知道代碼或者甚至可能。但如果是這樣,請選擇1行,然後截斷它並跟隨動態 –

0
IF OBJECT_ID('tempdb..##TmepTable') IS NOT NULL DROP TABLE ##TmepTable 
CREATE TABLE ##TmepTable (TmpCol CHAR(1)) 
DECLARE @SQL NVARCHAR(max) =' IF OBJECT_ID(''tempdb..##TmepTable'') IS NOT NULL DROP TABLE ##TmepTable 
         SELECT * INTO ##TmepTable from [MyTableName]' 
EXEC sp_executesql @SQL 

SELECT Alias.* FROM ##TmepTable as Alias 
IF OBJECT_ID('tempdb..##TmepTable') IS NOT NULL DROP TABLE ##TmepTable