【发布时间】:2016-01-21 10:01:09
【问题描述】:
我在下面的 SELECT 语句中加入了几个表,它有三个参数。
DECLARE @Jobid INT=0,
@leadid INT=0,
@employeeid INT=0
SELECT e.id,
l.id,
j.id,
e.NAME,
l.NAME,
j.NAME
FROM employee e
INNER JOIN leads l
ON e.leadid = l.id
INNER JOIN Jobs j
ON j.id = e.Jobid
没有过滤也可以正常工作。
在 WHERE 子句中,我必须添加如下内容。如果三个 ID 中的任何一个大于零,那么我必须考虑 WHERE 子句中的过滤器;如果它等于零,我不会考虑那个特定条件。
If @jobid> 0
then introduce this condition in where clause (j.id=@jobid)
If @leadid> 0
then introduce this condition in where clause (l.id=@leadid)
If @employeeid> 0
then introduce this condition in where clause (e.id=@employeeid)
我知道如何通过动态 SQL 来实现这一点,但我需要一个静态 SQL 语句来实现这一点。
我尝试了以下方法:
where
((J.Id = @Jobid and @Jobid>0 )
or @Jobid=0)
and (
(L.Id = @leadid and @leadid>0 )
or @leadid=0
)
and (
(e.Id = @employeeid and @employeeid >0 )
or @employeeid =0
)
但性能会受到影响。
请建议我在静态 SQL 中执行此操作的任何其他更好的方法,尤其是使用 Case When。
【问题讨论】:
-
查看answer。
-
只需
(J.Id = @Jobid or @Jobid=0)等也会这样做。 (不知道会不会更快...) -
@Mihail:我不是在寻找动态 SQL
-
@jarlh:谢谢贾尔赫
标签: sql sql-server sql-server-2012