5

テーブル:

ID     AppType     AppSubType   Factor
1   SC  CD      1.0000000000
2   SC  CD      2.0000000000
3   SC  NULL    3.0000000000
4   SC  NULL    4.0000000000

クエリ:

declare @ast varchar(10)

set @ast = null

select *
from tbl
where AppType = 'SC' and AppSubType = ISNULL(@ast, AppSubType)

結果:

ID  AppType AppSubType  Factor
1   SC  CD  1.0000000000
2   SC  CD  2.0000000000

質問:

このクエリは、最初の 2 レコードだけでなく、4 つのレコードすべてを返すべきではありませんか?

4

3 に答える 3

4

当然のことながら、@ast は null であり、Isnull は null を他の値と交換するため、@ast が null でないことを期待するべきではありません。AppSubType が null の場合、結果は null になりますが、 trueAppSubType=nullであるため意味がありませんAppSubType is null。null は値ではないため、equal では機能しません。期待される結果のために、このコードは機能します。

declare @ast varchar(10)

set @ast = null

select *
from tbl
where AppType = 'SC' and (AppSubType = ISNULL(@ast, AppSubType) Or AppSubType is null)
于 2013-10-28T07:46:54.150 に答える