如果布尔值为true,请选择一个表-SQL Server



我的SQL Server数据库中有一个名为Delivery的主表,Active Directory中保存了6个不同的角色。

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

我正试图在SQL Server中构建一个存储过程,该过程按角色返回表。

我有不同的函数,通过用户角色返回表,我们称之为:

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;

这假设所有函数都以相同的顺序和兼容的类型返回相同的列。

另一种选择是使用临时变量表

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

相关内容

最新更新