我知道這並不理想,但我想知道是否有可能基於動態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的數量,因爲表名是動態的,請讓我知道。
通常有助於解釋「無法工作」的含義。你有錯誤嗎?它以前如何? – 2012-08-07 13:49:13
對不起。如果您複製了我的帖子末尾非常簡單的代碼段並執行它,您應該會看到「無效的對象名稱」#MyTempTable'。「 – 2012-08-07 13:55:52