209 votes

Renvoyer une valeur booléenne sur une instruction SQL Select

Comment retourner une valeur booléenne dans une instruction SQL Select ?

J'ai essayé ce code :

SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

Et il ne renvoie que TRUE si le UserID existe sur la table. Je veux qu'il renvoie FALSE si le UserID n'existe pas sur la table.

332voto

Chad Henderson Points 2348

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

44voto

cableload Points 231

Peut-être quelque chose de ce genre :

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;

http://sqlfiddle.com/#!3/5e555/1

27voto

Stewart Points 3053

Étant donné que, généralement 1 = true y 0 = false tout ce que vous avez à faire est de compter le nombre de rangées, et de lancer une requête vers un boolean .

Par conséquent, votre code affiché ne nécessite qu'un COUNT() fonction ajoutée :

SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)

19voto

Ananthi Points 323

Utilisez 'Exists' qui renvoie soit 0 soit 1.

La requête sera du type :

SELECT EXISTS(SELECT * FROM USER WHERE UserID = 20070022)

11voto

G.Noulas Points 356
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)

Si count(*) = 0 retourne false. Si count(*) > 0 retourne vrai.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X