SQL Selectステートメントでブール値を返す方法は?
私はこのコードを試しました:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
TRUE
がテーブルに存在する場合にのみ返さUserID
れます。テーブルに存在しないFALSE
場合は返してほしい。UserID
ユーザーが存在しない場合、そこにあるものはまったく行を返しません。必要なものは次のとおりです。
SELECT CASE WHEN EXISTS (
SELECT *
FROM [User]
WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
おそらくこれらの行に沿ったもの:
SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;
1 = true
一般にと を考えると0 = false
、行数を数えて にキャストするだけboolean
です。
したがって、投稿されたコードにはCOUNT()
関数を追加するだけで済みます。
SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)
count(*) = 0 の場合は false を返します。count(*) > 0 の場合は true を返します。
私はこのようにします:
SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
ブール値は(少なくとも.NETでは)決してnullにならないため、デフォルトでfalseにするか、デフォルトでtrueの場合は自分で設定できます。ただし、1 = true であるため、null = false であり、余分な構文はありません。
注: 私はマイクロオームとして Dapper を使用していますが、ADO も同じように動作すると思います。
DECLARE @isAvailable BIT = 0;
IF EXISTS(SELECT 1 FROM [User] WHERE (UserID = 20070022))
BEGIN
SET @isAvailable = 1
END
最初は isAvailable ブール値が 0 に設定されています