sql - 从 [Query1] 或 [Query2] 中选择 #temp..

标签 sql sql-server-2008-r2

添加说明:我的代码在存储过程中运行。

这些年来我多次遇到这个问题,所以我想我会硬着头皮最后问,尽管我认为我可能缺少一个简单的解决方案。

经常是我喜欢用的情况

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

最佳答案

SELECT * 
INTO dbo.#Privs 
from (
  SELECT PrivilegeID 
  FROM   Users.tblRolePrivilegeLink 
  WHERE  RoleID = @RoleID and @RoleID > -1

  UNION

  SELECT PrivilegeID 
  FROM   dbo.fn_UserPrivileges(@UserID)
  WHERE  @UserID  > 1)

关于sql - 从 [Query1] 或 [Query2] 中选择 #temp..,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14776036/

相关文章:

sql - hive 连接的替代方案

sql-server - 如何查看无法在 SQL Server 2008 R2 中修改的存储过程的定义?

sql - 在 SQL 中,如果为空,如何将日期字段转换为字符串?

sql - 如何在sql server中水平旋转表

sql - 使用 SQL Server 2008 使用 WMIC 命令获取物理和网络驱动程序号

php - 我怎样才能让这个 mysqli 数据库类工作?

PHP查询MySql表2行之间的差异

sql - vb6 ADODB 连接字符串到 sql server 2008

sql - 混淆postgres中的数据

c# - 从 CSV 文件同步数据库