7

「ユーザー定義のテーブルタイプ」を定義すると、次のようになります。

CREATE TYPE [dbo].[BitType] AS TABLE(
    [B] [bit] NULL
)

このテーブル変数に0とnullを配置します。次に、このクエリを実行します。

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値も使用する必要があるかどうかです。クエリを正しく実行して、nullアイテムを含む結果を取得するにはどうすればよいですか。

ありがとう(ところで、私はMS SQL Server 2008 R2を使用しています)

4

3 に答える 3

5

SQL Server(および他のほとんどのデータベース管理システム)では、Nullはnullと同じではありません。結合された列で合体を行い、番兵の値を使用してnullを表す必要があります。

于 2012-01-05T04:58:25.480 に答える
5

NULL値を使用した唯一の有効な比較演算はIS NULLまたIS NOT NULLはであり、他の演算は常にfalseを返します(実際には-不明、@ Damien_The_Unbelieverのコメントを参照)

だから、次を試してみてください

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)
于 2012-01-05T05:08:46.993 に答える
3

isnull比較対象のアイテムにはチート使用があります。

例えば

SELECT something 
FROM theTable 
WHERE ISNULL(item,0) IN (0)
于 2012-01-05T05:03:14.017 に答える