我在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
有人可以帮助我使其正常工作吗?
答案 0 :(得分:3)
只需使用一个查询:
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;
这假定所有函数都以相同的顺序和兼容的类型返回相同的列。
答案 1 :(得分:0)
其他选择是使用临时变量表
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