澄清说明: 我的代码是在存储过程中运行的。
这些年来我遇到了多次这个问题,所以我想我可能错过了一个简单的解决方案,所以今天我终于问了出来。
通常情况下,我喜欢使用
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