添加說明:我的代碼在存儲過程中運行。SELECT INTO #temp .. FROM [Query1]或[Query2]
多年來,我已經多次遇到這個問題,所以認爲我會咬緊牙關,最後問,即使我想我可能會錯過一個簡單的解決方案。
時常是我喜歡使用
SELECT * INTO #Temp FROM ...
的情況。因爲我找到關於小數據集使用時,它通常執行比臨時表產生的任何其他手段更好。
但是有時我會有一個參數化的查詢,它可以運行在多個「模式」下,因此需要我的語句能夠根據這個模式從兩個完全不同的源填充#Temp,例如。
選項1
IF @RoleID > -1
SELECT PrivilegeID INTO dbo.#Privs FROM Users.tblRolePrivilegeLink WHERE RoleID = @RoleID
選項2
IF @UserID > -1
SELECT PrivilegeID INTO dbo.#Privs FROM dbo.fn_UserPrivileges(@UserID)
在這個例子中,我試圖讓一組特權爲任何一個角色或用戶,從表中一條直線,另一從一個函數。
我知道我可以使用常規的INSERT INTO ..邏輯,但我真的很感興趣,看看是否有這樣做的實際解決方案。也許與CTE或其他。
解決方案
-- Get distinct privileges
SELECT PrivilegeID
INTO dbo.#Privs
FROM
(
SELECT PrivilegeID FROM Users.tblRolePrivilegeLink WHERE RoleID > -1 AND RoleID = @RoleID
UNION
SELECT PrivilegeID FROM dbo.fn_UserPrivileges(@UserID) WHERE @UserID > -1
) AS T
如果您嘗試編譯它會出錯,它不會讓您選擇兩次同一個表。 – 2013-02-08 15:44:19
編輯,與子查詢使用'into' – paul 2013-02-08 15:46:17
是的,工作,謝謝。實際上似乎很簡單,一棵樹就不能見樹木。 :) – 2013-02-08 15:48:44