在SQL Server 2008中,我有一個執行復雜查詢的存儲過程。我會將結果寫入臨時表(不是系統臨時表,而是手動管理的表)。動態引用表而不使用動態SQL
表的名稱是用戶的Web會話ID的字符串表示形式。這解決了併發問題。這將被傳遞給存儲過程,它將創建表。要進行清理,名稱將被記錄在維護表中,並附帶一個時間戳記。
但是,名稱顯然是動態的。我不想使用動態SQL,因爲這會排除複雜查詢的任何編譯。我知道這是推動的事情,但我想要做的是如下:
DECLARE @TableName varchar(100)
SET @TableName = CAST(@SessionID AS varchar)
INSERT INTO @TableName
SELECT....{complex query}
我該怎麼做?
更多信息:
的記錄可能是行(僅標識)的數萬人。用戶可以對這個記錄集應用進一步的過濾,從而減少它。因此它必須是服務器上的表格。
「SELECT FROM」是固定部分,因此可編譯。只有「INSERT INTO」是動態的。從字面上看,QUERY是固定的,它只是*我將結果寫入這些更改。記錄集可能有成千上萬行,因此不適合會話變量。臨時文件是一個想法! – IamIC 2010-11-26 17:02:04
啊,臨時文件的問題是用戶可以應用過濾,這將減少記錄集。所以它必須是服務器上的表格。 – IamIC 2010-11-26 17:04:16
有道理,我已經相應地更新了我的答案。 – mlibby 2010-11-26 17:21:39