T-SQL Where语句依赖于DECLARED变量

时间:2015-08-14 02:57:48

标签: sql-server tsql

例如,我从C#获得此查询:

string query = "SELECT * FROM [dbo].[users]" +
               "WHERE " + ((class == "ADMIN") ? "class_id = 0;" : "class_id <> 0;")

我的TASK假设将此代码作为存储过程,所以我使用了这段代码:

DECLARE @class VARCHAR(25);
IF @class = "ADMIN"
BEGIN
    SELECT * FROM [dbo].[users]
    WHERE class_id = 0;
END

ELSE
BEGIN
    SELECT * FROM [dbo].[users]
    WHERE class_id != 0;
END

如何在不输入SELECT * FROM [dbo].[users]的情况下缩短我的T-SQL代码 一遍又一遍?.....

PS。我使用了DYNAMIC SQL编码风格,但我的团队不会批准它..

2 个答案:

答案 0 :(得分:1)

你可以像这样缩短:

SELECT * FROM [dbo].[users]
WHERE (@class = 'ADMIN' AND class_id = 0) OR (@class <> 'ADMIN' AND class_id <> 0)

2注:

使用<>代替!=,因为首先是标准SQL

由于SQL注射,始终使用参数化查询。

答案 1 :(得分:0)

另一种方法:

SELECT Class_id, Class_Name FROM 
(
 select * 
 ,case when class_id = 0 then 'Admin' --Add as many conditions as needed
 --when class_id = 1 then 'Teacher'
 else '' end as [ClassType]
 from dbo.Users
)A WHERE ClassType = @a

您可以在CASE语句中以这种方式轻松添加多个条件。评论中有一个插图。