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
我的 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