web-dev-qa-db-fra.com

SERVEUR SQL: Vérifie si la variable est null et assigne ensuite une instruction pour la clause Where

J'essaie de réaliser quelque chose comme le ci-dessous dans la clause WHERE en SQL. 

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

J'ai essayé ce qui suit:

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

ce qui est faux. Quelqu'un peut-il aider à encadrer la déclaration exacte. Merci!

6
Krishh

La syntaxe Isnull () est intégrée pour ce genre de chose.

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

Pour votre exemple, gardez à l’esprit que vous pouvez changer la portée pour qu’elle soit un autre prédicat d’une variable différente pour une logique booléenne complexe. Le seul inconvénient est que vous devez le convertir différemment si vous devez rechercher un type de données différent. Donc, si j'ajoute une autre ligne mais que je souhaite spécifier int de 8 ET également la référence d'un texte similaire à 'répéter', je peux le faire avec une référence à nouveau à 'isnull' de la première variable tout en renvoyant un type de données de résultat totalement différent pour une référence différente à un champ différent.

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 est la syntaxe que j'utilise pour de telles choses, quand COALESCE ne sert à rien.

Essayer:

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

Essayez une déclaration de cas

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

est null peut être utilisé pour vérifier si les données null proviennent d'une requête comme dans l'exemple suivant 

 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