2010-12-08 29 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)