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 il ne revient que TRUE
si le UserID
existe sur la table. Je veux qu'il revienne FALSE
si le UserID
n'existe pas sur la table.
SELECT WHEN CAST(1 AS BIT) THEN 'YES' END AS result
- entraîne une erreur, c'estCAST(1 AS BIT)
-à- dire n'est pas le même TRUE logique.Réponses:
Ce que vous avez là ne renverra aucune ligne si l'utilisateur n'existe pas. Voici ce dont vous avez besoin:
la source
1
place de*
.*
c'est plus idiomatique. Voir cette question .AS bool
partie est très importante):CAST( CASE WHEN EXISTS ( SELECT * FROM mytable WHERE mytable.id = 1) THEN TRUE ELSE FALSE END AS bool) AS nameofmycolumn
Peut-être quelque chose du genre:
http://sqlfiddle.com/#!3/5e555/1
la source
Étant donné que généralement
1 = true
et0 = false
, tout ce que vous avez à faire est de compter le nombre de lignes et de convertir en aboolean
.Par conséquent, votre code publié n'a besoin que d'une
COUNT()
fonction ajoutée:la source
Exists(
test est beaucoup plus rapide que de faire unCount(1)
test sur des tables avec un grand nombre de lignes.UserID
est indexée (ou est même le PK), vous allez sûrement directement à la ligne unique qui existe (ou non).Utilisez 'Exists' qui renvoie 0 ou 1.
La requête sera comme:
la source
Si count (*) = 0 renvoie faux. Si count (*)> 0 renvoie vrai.
la source
Je fais ça comme ça:
Étant donné qu'un booléen ne peut jamais être nul (du moins dans .NET), il doit être défini par défaut sur false ou vous pouvez le définir vous-même si la valeur par défaut est true. Cependant 1 = vrai, donc null = faux, et aucune syntaxe supplémentaire.
Remarque: j'utilise Dapper comme micro orm, j'imagine qu'ADO devrait fonctionner de la même manière.
la source
Notez un autre problème équivalent: créer une requête SQL qui retourne (1) si la condition est satisfaite 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 atteindre 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 à votre problème.
la source
Pour ceux d'entre vous qui souhaitent obtenir la valeur ajoutée d'un nom de colonne personnalisé, cela a fonctionné pour moi:
Vous pouvez ignorer les guillemets doubles du nom de la colonne au cas où vous ne seriez pas intéressé par le respect de la casse du nom (dans certains clients).
J'ai légèrement modifié la réponse de @ Chad à ce sujet.
la source
La valeur booléenne initialement isAvailable est définie sur 0
la source