2012-08-07 42 views
1

我知道這並不理想,但我想知道是否有可能基於動態sql填充臨時表?使用動態sql來填充臨時表

一個非常相似的示例,我想要實現的是顯示在this answer爲任何

SELECT into #T1 execute ('execute ' + @SQLString) 

INSERT into #T1 execute ('execute ' + @SQLString) 

我無法得到任何工作。從編輯看來,第一個選項是錯誤的,所以對於第二個選項我嘗試了類似的東西;

DECLARE @SQLString VARCHAR (2000) = 'SELECT * FROM INFORMATION_SCHEMA.COLUMNS' 

INSERT into #MyTempTable execute (@SQLString) 

任何想法,非常感謝。

編輯:

在試圖澄清什麼,我想不會太本地化做的,我解釋的簡單,因爲我可以在下面。

我在我的數據庫的臨時區域中有數據,其中包含具有動態名稱和動態列數的表。但是,每個表的一些列名稱是相同的。我希望能夠將已知列簡單地提取到臨時表(或表變量,CTE,派生表或其他)中,並根據此操作,而不是在動態SQL中構建所有內容。

所以給了一張表格,

CREATE TABLE SomeParticularNameThatCantBeKnownToAStoredProc (
     [1] AS VARCHAR(100), 
     [2] AS VARCHAR(100), 
     ... -- Could be any number of these columns 
     [Id] AS INT, 
     [KnownCol] AS VARCHAR(100), 
     [KnownCol2] AS VARCHAR(100), 
     .... 
     [DboId] AS INT 
) 

我希望能夠執行必要的操作來允許我處理這些數據,而無需在動態sql中完成所有操作。我希望能夠做到這樣的事情;

DECLARE @TableName AS VARCHAR(1000) = 'SomeParticularNameThatCantBeKnownToAStoredProc' 

    SELECT [Id], [KnownCol], [KnownCol2], [DboId] 
    INTO #KnownName 
    FROM @TableName -- I know this isn't possible, but this is what I'd like to do 

這將允許我對一致的#KnownName執行SQL語句。我需要做的其他一些操作非常冗長,例如使用數據與其他現有表關聯,將數據從臨時表複製到它們的dbo模式等價物,並使用MERGE將DboId與臨時表Id相匹配OUTPUT INTO,如here所述,依此類推。

如果您可以考慮其他任何方式,我可以限制動態SQL的數量,因爲表名是動態的,請讓我知道。

+2

通常有助於解釋「無法工作」的含義。你有錯誤嗎?它以前如何? – 2012-08-07 13:49:13

+0

對不起。如果您複製了我的帖子末尾非常簡單的代碼段並執行它,您應該會看到「無效的對象名稱」#MyTempTable'。「 – 2012-08-07 13:55:52

回答

2

假設#MyTempTable已經存在:

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N'SELECT * FROM INFORMATION_SCHEMA.COLUMNS;'; 
INSERT #MyTempTable EXEC sp_executesql @SQLString; 

否則請說明你正在嘗試做的。如果表格尚未創建,則可以執行動態SQL內的所有操作,例如:

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N'SELECT * INTO #MyTempTable FROM INFORMATION_SCHEMA.COLUMNS; 
    SELECT * FROM #MyTempTable;'; 
EXEC sp_executesql @sql; 
+0

一旦我從上面的例子中將SQLString更改爲@sql,我得到了我在上面的示例中發佈的相同錯誤 - 無效的對象名稱「#MyTempTable」。 – 2012-08-07 13:58:56

+0

我剛剛重讀了關於#MyTempTable已存在的假設的文章。這很可能是我的問題。您是否知道我可以通過動態sql定義臨時表的結構並填充它的方式。這很可能是我的問題的原因。我的印象與[本答案](http://stackoverflow.com/a/6100350/685760)類似,臨時表的結構被定義爲查詢運行的結果。 – 2012-08-07 14:09:50

+0

再次澄清你實際嘗試做什麼可能會有所幫助。爲什麼這裏需要#temp表格?它在填充之後還有什麼用呢? – 2012-08-07 14:11:24