2017-04-10 30 views
-1

私はあなたが2つの異なる型を比較しているならば、SQLは他の型と一致するように型の優先順位が最も低い方を変換しなければならないことを知っています。たとえば、左辺がテーブルの列である場合、varchar = nvarcharの場合、比較を実行する前に、セット全体をnvarcharに変換する必要があります。SQL Serverビットとリテラルを比較すると暗黙の変換がないのはなぜですか?

"Bit_Column = 1"の同じパターンを使用すると、SQLは最初にビット列を整数に変換する必要がありますか?しかし、実行計画を見ると、SQLはリテラルをビットに変換し、それ以外の方法では変換しません。

どうしてですか?

おかげ

+1

私は正直なところ、私がその質問を理解しているのか、そうでなければあなたがそれがそうでないと想像するのか分からない。リテラル1からビットへの変換(または「はい」または「いいえ」からビットへの変換)は簡単であり、期待されています。文字列の場合、それはnvarcharに変換されます。逆の変換はデータの損失につながる可能性があるため、特定のキャストなしでは許可されません。 – pmbAustin

+0

実行計画のどこにリテラルが少し変換されたかを見せてください。また、リテラルはデータ型ではなく、整数とビットがあります。 – RBarryYoung

+0

私はクエリのオプティマイザがより効率的であるように、ちょうど反対のビットにintを変換していたと思います。 1つの整数1をちょうどビットに変換できるときに、なぜBit_Columnの各ビットをintに変換するのですか? – mallan1121

答えて

関連する問題