SQL Server Lorsque Déclaration de cas de l'article?
-
12-09-2019 - |
Question
J'ai une clause where qui vérifie l'existence de lignes dans une sous-requête, mais je veux seulement exécuter ce contrôle si un bit est à 1. Ainsi, par exemple:
Select * from Listing l
Where
l.IsDeleted=1
AND CASE WHEN @MustHasPicture = 1 THEN
(
EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[ListingPictures] AS [lp]
INNER JOIN Listing l ON lp.ListingID=l.ID
)
)
ELSE 1 END = 1
Cette syntaxe est erronée, et j'espère que quelqu'un peut me diriger dans la bonne direction. Merci.
La solution
SELECT *
FROM Listing l
WHERE IsDeleted = 1
AND ( @MustHasPicture <> 1 OR
(@MustHasPicture = 1 AND l.id IN (
SELECT listingid
FROM ListingPictures
)
)
)
Autres conseils
Pas besoin de faire un cas -. Si la première partie d'un and
échoue, la seconde partie ne sera pas exécutée
select
*
from
Listing l
Where
l.IsDeleted = 1
and ((@MustHasPicture = 1 and exists (...)) or 1)
Qu'en est celui-ci:
SELECT * FROM Listing l
WHERE l.IsDeleted = 1
AND (@MustHasPicture = 1
AND EXISTS(SELECT * FROM [dbo].[ListingPictures] AS [lp]
WHERE lp.ListingID = l.ID)
OR @MustHasPicture = 0)
Mais d'où vient la valeur de @MustHasPicture?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow