2010-07-19 5 views
1

J'ai une procédure dans laquelle la condition ci-dessous doit être écrite dans une clause WHERE. Comment est-ce que je fais cela en utilisant CASE, ou quelque chose comme ça?Instruction CASE dans la clause WHERE

IF (@itemId IS NOT NULL) 
    dataId = @itemid 
+1

Est-ce vraiment 'itemid' et non' @ itemId' dans la deuxième ligne? – Guffa

+0

désolé il devrait être @ itemId.forgot pour ajouter @ –

+2

Quelle est la taille de votre table susceptible d'arriver à? Toutes ces techniques ne conviennent vraiment qu'aux petites tables. –

Répondre

4

Vous n'avez pas besoin d'un cas pour cela:

... where @itemId is null or dataId = @itemId ... 

Ou:

... where isnull(@itemId, dataId) = dataId ... 
2
Case When @ItemId Is Not Null And dataId = itemId Then 1 Else 0 End = 0 

Si Dataid n'est pas annulable, alors vous pouvez simplifiez à:

dataId = Coalesce(@ItemId, dataId) 

ou en utilisant une expression de cas

dataId = Case When @ItemId Is Null Then itemId Else dataId End 
1

Vous pouvez faire quelque chose comme ceci:

SELECT dataId = CASE WHEN @itemId IS NOT NULL THEN @itemId 
     ELSE dataId END 
FROM YourTable