例如,我从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编码风格,但我的团队不会批准它..
答案 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
语句中以这种方式轻松添加多个条件。评论中有一个插图。