Sql server: Alternativen für bedingte Ausdrücke in welcher Bedingung

Durch das Schreiben von Client-server-Anwendungen in der Regel ein Stolpern in Fällen, in denen er eine Abfrage, die verschiedene datasätze, je nachdem, was der angemeldeter Benutzer ist,

Ich benutze diesen Ansatz, aber ich frage mich, ob es Alternativen gibt, können Sie vorschlagen?

(der Grund, warum ich frage, ist, dass für mehr complx Abfragen dies wird ganz unleserlich, während mit einigen CASE Aussagen wäre es besser).

 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 

   

Optionen:

IF und ELSE

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

Ändern Sie die Parameter auf der Grundlage eines anderen Parameters

 IF @UserIsAdministrator = 1 SET @UserID = NULL SELECT * FROM employees WHERE manager_ID = ISNULL(@UserID, manager_ID) 

Oder verschiedene viewen / gespeicherte Procs

Ich denke, ich würde versuchen zu vermeiden, diese Art von Autorisierung in die SQL-Abfragen insgesamt einzubetten. Haben Sie separate Abfragen und lösen Sie Rollen und permissions in einer separaten Ebene / Komponente, bevor Sie auswählen, welche Abfrage ausgeführt werden soll.