2010-12-08 6 views
9

J'ai un SP qui me pose beaucoup de problèmes.TSQL Case dans laquelle l'instruction if est null

Le sp reçoit deux paramètres @madeByUserId et @reportedByUserId. Je veux avoir quelque chose comme:

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

Fondamentalement, je veux faire un cas dans la clause where d'inclure une autre condition de filtre en fonction de l'hypothèse nulle/état non nul de la @reportedByUserId

Est-ce possible ?

Merci beaucoup, Radu

Répondre

6

Essayez:

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

merci, vous sauvé ma journée :) –

+2

Ou de façon plus concise: 'où MadeByUserId = @madeByUserId ET ReportedByUserID = isnull (@reportedByUserID, ReportedByUserID)' –

8

Vous pouvez utiliser COALESCE.

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

Cela se traduit

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

De MSDN

COALESCE

Renvoie la première expression non nulle parmi ses arguments.

+0

Merci, belle et propre –

0

Ajouter une instruction if

IF (@reportedByUserId IS NOT NULL)

SELECT * FROM table t OÙ t.MadeByUserId = madeByUserId etc

0

Je pense que cela vous donnera ce que vous êtes après.

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