2010-12-08 52 views
9

我有一个SP,它给了我很多困难时期。TSQL如果参数为空,则在where语句中

sp获取@madeByUserId和@reportedByUserId两个参数。 我想有这样的:

select * from table 
    where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID) 

基本上我想要做的情况下where子句以包含基于的@reportedByUserId

空/不为空状态的另一个过滤条件是可能的?

非常感谢, 拉杜

回答

6

尝试:

select * from table 
where MadeByUserId = @madeByUserId 
AND (@reportedByUserID IS null OR ReportedByUserID = @reportedByUserID) 
+0

谢谢,你救了我的一天:) – 2010-12-08 08:45:47

+2

或者更简洁的方式: `其中MadeByUserId = @madeByUserId AND ReportedByUserID = ISNULL(@reportedByUserID,ReportedByUserID)` – 2014-01-23 09:03:04

8

你可以使用COALESCE

SELECT * 
FROM Table 
WHERE MadeByUserId = @madeByUserId 
     AND ReportedByUserID = COALESCE(@reportedByUserID, ReportedByUserID) 

这转化为

if @reportedByUserID is `NOT NULL` then 
    compare ReportedByUserID with @reportedByUserID 
else 
    compare ReportedByUserID with ReportedByUserID 

MSDN

COALESCE

返回第一个非空表达 它的参数之一。

0

添加一个if语句

IF(@reportedByUserId IS NOT NULL)

SELECT * FROM 表t WHERE t.MadeByUserId = madeByUserId等

0

我觉得这会给你你在追求什么。

IF (@reportedByUser IS NULL) 
    select * from table 
    where MadeByUserId = @madeByUserId 
ELSE 
    select * from table 
    where MadeByUserId = @madeByUserId and ReportedByUserID = @reportedByUserID)