Выберите таблицу, если логическое значение истинно - SQL Server - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть основная таблица с именем Delivery в моей базе данных SQL Server и 6 разных ролей, сохраненных в Active Directory.

Каждая роль должна видеть одну и ту же таблицу, но с разными значениями, и у человека может бытьнесколько ролей.

Я пытаюсь построить хранимую процедуру в 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

может кто угоднопомочь мне заставить его работать?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Другой альтернативой является использование таблицы временных переменных

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
0 голосов
/ 04 декабря 2018

Просто используйте один запрос:

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;

Это предполагает, что все функции возвращают одинаковые столбцы в одинаковом порядке и с совместимыми типами.

...