追加された説明:私のコードはストアドプロシージャ内で実行されます。
私は何年にもわたってこの問題に何度も遭遇したので、簡単な解決策が欠けているかもしれないとは思いますが、弾丸を噛んで最終的に尋ねると思いました。
多くの場合、私が使用するのが好きな場合です
SELECT * INTO #Temp FROM ...
..小さなデータセットで使用すると、一般的に他のどの一時テーブル生成手段よりもパフォーマンスが向上することがわかったためです。
ただし、複数の「モード」で実行できるパラメーター化されたクエリがある場合があるため、このモードに応じて2つの完全に異なるソースから#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)
この例では、ロールまたはユーザーのいずれかの特権のセットを取得しようとしています。1つはテーブルから直接、もう1つは関数から取得します。
通常のINSERTINTO..ロジックを使用できることはわかっていますが、この方法でそれを行うための実際の解決策があるかどうかを確認したいと思います。多分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