Retourne la valeur booléenne sur L'instruction SQL Select
Comment renvoyer une valeur booléenne sur L'instruction SQL Select?
, j'ai essayé ce code:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
Et ne renvoie la valeur TRUE
que si le UserID
existe sur la table. Je veux qu'il revienne FALSE
si le UserID
n'existe pas sur la table. Merci bien.
6 réponses
Ce que vous avez là ne retournera aucune ligne si l'utilisateur n'existe pas. Voici ce dont vous avez besoin:
SELECT CASE WHEN EXISTS (
SELECT *
FROM [User]
WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
Peut-être quelque chose dans ce sens:
SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;
Étant Donné que couramment 1 = true
et 0 = false
, tout ce que vous devez faire est de compter le nombre de lignes, et jeté une boolean
.
Par conséquent, votre code posté n'a besoin que d'une fonction COUNT()
ajoutée:
SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)
Si count (*) = 0 renvoie false. Si count (*) > 0 renvoie true.
Je le fais comme ceci:
SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
Vu qu'un booléen ne peut jamais être null (au moins dans.NET), il devrait par défaut à false ou vous pouvez le définir vous-même si c'est vrai par défaut. Cependant 1 = true, donc null = false, et aucune syntaxe supplémentaire.
Note: j'utilise Dapper comme micro orm, j'imagine QU'ADO devrait fonctionner de la même manière.
Utilisez 'Exists' qui renvoie 0 ou 1.
, La requête sera comme:
SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)