2012-01-05 12 views
3

を働いていません。 は、それから私は、このクエリを実行します。クエリSQL Serverが

SELECT something FROM theTable WHERE item IN @theBitTypeTable 

だけでitem=0ないitem is null

簡単に言えば取得します:SELECT something FROM theTable WHERE item IN (0, NULL)は私の質問、それはとてもSELECT something FROM theTable WHERE item=0 OR item IS NULL

にする必要があり (エラーなしが)動作していません私がユーザ定義テーブルタイプを使用したいのですが、NULL値を使用する必要もあります。結果を正しく取得するためにクエリを正しく実行するにはどうすればいいですか?

おかげで(ところで、私は、MS SQL Server 2008 R2を使用)

答えて

4

NULL値でのみ有効な比較演算は他の人が常に(実際には - 不明、@ Damien_The_Unbelieverさんのコメントを参照してください)falseを返す、IS NULLまたはIS NOT NULLある

ので、以下の

を試してみてください
CREATE TYPE [dbo].[BitType] AS TABLE(
    [B] [tinyint] NOT NULL 
) 
GO 
declare @theBitTypeTable BitType 

insert @theBitTypeTable 
VALUES(0), (2 /* instead of NULL*/) 

SELECT something FROM theTable WHERE IsNull(cast(item as tinyint), 2) IN (select B from @theBitTypeTable) 
+0

BitTypeを作成するのではなく、TinyintTypeテーブル変数を作成する必要がありますキャストする必要があります。試してみてください –

+0

うん、データ型のサイズは同じですので、パフォーマンスが低下することはありませんが、汎用性は得られます –

+1

他の比較*は 'false'を返さず、' unknown'を返します。このような比較のまわりに 'NOT()'を置くと、違いは容易に明らかです。 'NOT(1 = NULL)'は 'true'ではありません。 –

4

ヌルいないSQL Server内の同じヌル(および他のほとんどのデータベース管理システム)。結合された列に合体を行い、ヌルを表すためにセンチネル値を使用する必要があります。

1

比較対象アイテムには不正使用がありますisnullです。

例えば

SELECT something 
FROM theTable 
WHERE ISNULL(item,0) IN (0)