1

SQL Serverにはブールデータ型がないことを知っています。最善のオプションは、BITデータ型を使用することです。

私の質問は、ブール式が何を評価するかです。たとえば、私がステートメントを持っている場合

expr1 AND expr2

expr1がtrueでexpr2がfalseの場合、値1と0のBITに内部的に評価されますか?そして、AND演算子はBITをチェックしますか?

次のことが機能するはずなので、これは当てはまらないと思います。

select 1 where 1 and 0

では、SQLサーバーは内部的にブールデータ型を持っていますか?

次の作品

select 1 where 1 = 0
select 1 where 1 = 0 and 0 = 0

でも、これ

select 1 where 1 and 0

レポート

メッセージ4145、レベル15、状態1、行1条件が予想されるコンテキストで指定された、'および'の近くの非ブール型の式。

つまり、内部的にSQL Serverは式をブール値として処理しますが、なぜそのデータ型にアクセスできないのですか。

4

2 に答える 2

3

SQLServerにはBooleanデータ型があります。論理演算子(Transact-SQL)のマニュアルページを開いて、次のステートメントを見つけることができます。

論理演算子は、ある条件の真偽をテストします。比較演算子のような論理演算子は、TRUE、FALSE、またはUNKNOWNの値を持つブールデータ型を返します。

他のTransact-SQLデータ型と同じようにこの型を使用することはできません。たとえば、ブール変数または引数を宣言したり、テーブルにブール列を追加したり、ブールとの間でキャストしたりすることはできません。ただし、ブールを使用して、必要なコンテキスト(、、チェック制約など)で使用することができます。これらの式にブール演算子を適用することもできます:、etal。(、、、およびその他の演算子は、ブール結果を返すという意味でブールと見なすこともできますが、それらのオペランドは実際にはブールではありません。)WHEREONANDNOT<=LIKE

したがって、要約すると、SQL Serverにブール型がありますが、上記のように、その使用は制限されています。なんで?私の答えはばかげたものかもしれませんが、申し訳ありませんが、それは私が満足しているものです。これが彼らが選んだ方法です。

于 2012-06-21T10:13:39.530 に答える
0

論理演算子はtrueまたはfalseになります。したがって、あなたの例では、 expr1andexpr2がtrueの場合に結果が得られます。それが真であるかどうかを確認するには、各式に対して実行する操作です。

したがって、たとえば列をビット値のようなものと比較するcolumn_bit = 0と、結果はtrueまたはfalseになります。yourexpr1がtrueでexpr2falseの場合、論理積演算子の結果はfalseになります。

編集:

select 1 where 1 and 0比較演算子を使用していないため、作業できません。1 = 1 AND 0 = 0は機能しますが、意味がありません:)

于 2012-06-21T09:38:26.733 に答える