Sql Server: альтернативы условным выражениям в условии where - PullRequest
0 голосов
/ 19 мая 2011

При написании клиент-серверных приложений обычно возникает одна проблема в тех случаях, когда ему нужно выполнить запрос, который возвращает разные записи, в соответствии с которыми зарегистрирован пользователь.

Я использую этот подход, но мне интересно, есть лиальтернативы, можете ли вы предложить?

(причина, по которой я спрашиваю, состоит в том, что для более сложных запросов это становится совершенно нечитаемым, в то время как для некоторых операторов CASE это будет лучше).

declare @UserIsAdministrator bit;
declare @UserID integer; 
set @UserIsAdministrator = 0 -- test value 
set @UserID = 41;            -- test value 

SELECT * FROM employees  
WHERE 
    (@UserIsAdministrator = 1) -- if user is admin return all records
  OR 
    (
       (@UserIsAdministrator = 0) 
     AND 
       (manager_ID = @UserID)
    )                          -- if user is not admin return only "his" records

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Думаю, я бы постарался вообще не включать этот тип авторизации в запросы SQL.Создавайте отдельные запросы и разрешайте роли и привилегии в отдельном слое / компоненте, прежде чем выбирать, какой запрос выполнять.

1 голос
/ 19 мая 2011

Опции:

IF и ELSE

IF @UserIsAdministrator = 1
    SELECT * FROM employees
ELSE
    SELECT * FROM employees WHERE manager_ID = @UserID

Изменение параметров на основе другого параметра

IF @UserIsAdministrator = 1
    SET @UserID = NULL

SELECT * FROM employees  
WHERE manager_ID = ISNULL(@UserID,  manager_ID)

Или другие виды / сохраненные данные

...