Select a table 如果布尔值为真 - SQL 服务器

Select a table if boolean is true - SQL Server

我的 SQL 服务器数据库中有一个名为 Delivery 的主要 table,Active Directory 中保存了 6 个不同的角色。

每个角色需要看到相同的table但具有不同的值,一个人可能有多个角色。

我正在尝试在 SQL 服务器中构建一个存储过程,该存储过程 return 是 table 的角色。

我有不同的功能 return table 按用户角色,我们称它们为:

GetRole1Deliveries()
GetRole2Deliveries()
GetRole3Deliveries()
GetRole4Deliveries()
GetRole5Deliveries()
GetRole6Deliveries()

我构建了一个程序,为每个角色获取一个布尔(位)值作为参数, 我想做这样的事情:

CREATE PROCEDURE [dbo].[GetDeliveriesByRole] (@p_role1 bit,@p_role2 bit,@p_role3 bit,@p_role4 bit@p_role5 bit,@p_role6 bit)

AS
BEGIN

if @p_role1=1 select * from GetRole1Deliveries();
union
if @p_role2=1 select * from GetRole2Deliveries();
union
if @p_role3=1 select * from GetRole3Deliveries();
union
if @p_role4=1 select * from GetRole4Deliveries();
union
if @p_role5=1 select * from GetRole5Deliveries();
union
if @p_role6=1 select * from GetRole6Deliveries();



END

任何人都可以帮助我让它工作吗?

只需使用一个查询:

select * from GetRole1Deliveries() where @p_role1 = 1
union
select * from GetRole2Deliveries() where @p_role2 = 1
union
select * from GetRole3Deliveries() where @p_role3 = 1
union
select * from GetRole4Deliveries() where @p_role4 = 1
union
select * from GetRole5Deliveries() where @p_role5 = 1;

这假定所有函数 return 具有相同顺序和兼容类型的相同列。

另一种方法是使用临时变量 table

DECLARE @Result table ([id] int, [desc] nvarchar(400)) --same estructure of result table

IF (@p_role1 = 1)
BEGIN
    INSERT @Result
    SELECT 1, 'role 1'
END
IF (@p_role2 = 1)
BEGIN
    INSERT @Result
    SELECT 2, 'role 2'
END
IF (@p_role3 = 1)
BEGIN
    INSERT @Result
    SELECT 3, 'role 3'
END
IF (@p_role4 = 1)
BEGIN
    INSERT @Result
    SELECT 4, 'role 4'
END
IF (@p_role5 = 1)
BEGIN
    INSERT @Result
    SELECT 5, 'role 5'
END

SELECT [Id], [desc]
FROM @Result