Comment retourner une valeur booléenne sur une instruction SQL Select?
J'ai essayé ce code:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
et ne retourne que la valeur TRUE
si la UserID
existe sur la table. Je veux qu'il renvoie la valeur FALSE
si la UserID
n'existe pas sur la table. Merci beaucoup.
Ce que vous avez là ne renverra 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 1 = true
et 0 = false
sont couramment utilisés, il suffit de compter le nombre de lignes et de transtyper en 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 ça:
SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
Considérer comme un booléen ne peut jamais être nul (du moins dans .NET), il devrait être défini par défaut sur false ou vous pouvez le définir vous-même s'il est défini sur true Cependant 1 = true, donc null = false et aucune syntaxe supplémentaire.
Remarque: J'utilise Dapper comme micro-ordinateur. J'imagine que 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)
Pour ceux d'entre vous qui souhaitent obtenir la valeur en ajoutant un nom de colonne personnalisé, cela a fonctionné pour moi:
CAST(
CASE WHEN EXISTS (
SELECT *
FROM mytable
WHERE mytable.id = 1
)
THEN TRUE
ELSE FALSE
END AS bool)
AS "nameOfMyColumn"
Vous pouvez ignorer les guillemets du nom de la colonne au cas où vous ne voudriez pas conserver la sensibilité à la casse du nom (dans certains clients).
J'ai légèrement modifié @ la réponse de Chad pour cela.
Notez un autre problème équivalent: création d'une requête SQL qui renvoie (1) si la condition est remplie et un résultat vide dans le cas contraire. Notez qu'une solution à ce problème est plus générale et peut facilement être utilisée avec les réponses ci-dessus pour répondre à la question que vous avez posée. Puisque ce problème est plus général, je prouve sa solution en plus des belles solutions présentées ci-dessus pour votre problème.
SELECT DISTINCT 1 AS Expr1
FROM [User]
WHERE (UserID = 20070022)