web-dev-qa-db-ja.com

SQL SERVER:変数がnullかどうかを確認し、Where句のステートメントを割り当てます

私はSQLのWHERE句で以下のようなものを達成しようとしています。

if (@zipCode ==null)
begin
([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)   
end
else if(@zipCode !=null)
begin
([Portal].[dbo].[Address].PostalCode=@zipCode )
end  

私は次を試しました:

WHERE ((@zipCode IS NOT NULL AND ([Portal].[dbo].[Address].PostalCode=@zipCode)) OR (@zipCode IS NULL AND ([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)))

それは間違っています。誰でも正確な声明を組み立てるのを手伝うことができます。ありがとう!

7
Krishh

Isnull()構文はこの種のものに組み込まれています。

declare @Int int = null;

declare @Values table ( id int, def varchar(8) )

insert into @Values values (8, 'I am 8');

-- fails
select *
from @Values
where id = @Int

-- works fine
select *
from @Values
where id = isnull(@Int, 8);

この例では、スコープを変更して、複雑なブールロジックの異なる変数の述語を使用する別のスコープに変更できることに注意してください。異なるデータ型を調べる必要がある場合は、別の方法でキャストする必要があります。別の行を追加し、8のintと「繰り返し」に類似したテキストの参照を指定したい場合、最初の変数の「isnull」に戻って参照しても、まったく異なる結果データ型を返すことができます異なるフィールドへの異なる参照に対して。

declare @Int int = null;

declare @Values table ( id int, def varchar(16) )

insert into @Values values (8, 'I am 8'), (8, 'I am 8 repeat');

select *
from @Values
where id = isnull(@Int, 8)
and def like isnull(cast(@Int as varchar), '%repeat%')
8
djangojazz

is nullは、COALESCEが役に立たない場合に、このようなことに使用する構文です。

試してください:

if (@zipCode is null)
  begin
    ([Portal].[dbo].[Address].Position.Filter(@radiusBuff) = 1)   
  end
else 
  begin
    ([Portal].[dbo].[Address].PostalCode=@zipCode )
  end  
13
marceljg

ケースステートメントを試す

WHERE
CASE WHEN @zipCode IS NULL THEN 1
ELSE @zipCode
END
1
Travis

if((PID = @ pidおよびPageNumber = 5のPageImageからVisitCountを選択)NULL = @ pidおよびPageNumber = @ pageno end

0
Raj Kumar

is nullは、次の例のように、クエリからnullデータが送信されているかどうかを確認するために使用できます

 declare @Mem varchar(20),@flag int
select @mem=MemberClub from [dbo].[UserMaster] where UserID=@uid
if(@Mem is null)
begin
    set @flag= 0;
end
else
begin
    set @flag=1;
end
return @flag;
0
Raj Kumar