Sql Server:条件表达式的替代条件

时间:2011-05-19 08:39:06

标签: sql-server sql-server-2008 where-clause

通过编写客户端服务器应用程序,通常会遇到一个问题,即他需要根据登录用户执行返回不同记录的查询。

我使用这种方法,但我想知道是否有替代方案,您可以建议吗?

(我问的原因是,对于更多的complx查询,这变得非常难以理解,而使用一些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 个答案:

答案 0 :(得分:2)

我想我会尽量避免在SQL查询中嵌入这种类型的授权。在选择要执行的查询之前,请在单独的层/组件中单独查询并解析角色和权限。

答案 1 :(得分:1)

选项:

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)

或不同的观点/存储过程