it-swarm.com.de

SQL-SERVER: Überprüfen Sie, ob die Variable null ist, und weisen Sie dann die Where-Klausel zu

Ich versuche, etwas wie die unten in WHERE-Klausel in SQL zu erreichen. 

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

Ich habe folgendes versucht:

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

was falsch ist. Kann jemand helfen, die genaue Aussage zu gestalten. Vielen Dank!

6
Krishh

Die Isnull () - Syntax ist für diese Art von Dingen eingebaut.

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);

Beachten Sie für Ihr Beispiel, dass Sie den Gültigkeitsbereich ändern können, um eine andere Variable für komplexe Boolesche Logik zu definieren. Der einzige Nachteil ist, dass Sie ihn anders umwandeln müssen, wenn Sie nach einem anderen Datentyp suchen müssen. Wenn ich also eine weitere Zeile hinzufüge, aber int von 8 angeben möchte UND auch die Referenz von Text ähnlich wie "repeat", kann ich dies mit einer Referenz auf die "isnull" der ersten Variablen tun, aber einen völlig anderen Ergebnisdatentyp zurückgeben für einen anderen Verweis auf ein anderes Feld.

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%')
7
djangojazz

is null ist die Syntax, die ich für solche Dinge verwende, wenn COALESCE nichts hilft.

Versuchen:

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

Versuchen Sie eine Fallaussage

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

if ((wählen Sie VisitCount von PageImage aus, wobei PID = @ pid und PageNumber = 5) NULL ist) begin update PageImage set VisitCount = 1 wobei PID = @ pid und PageNumber = @ pageno end else begin update PageImage set VisitCount = VisitCount + 1 where PID = @ pid und PageNumber = @ pageno enden

0
Raj Kumar

mit null kann überprüft werden, ob Nulldaten aus einer Abfrage stammen (siehe folgendes Beispiel) 

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