2009-09-30 7 views
3

Je veux vérifier si @a est différent de @b dans le "ansi_nulls off":SQL "ANSI_NULLS OFF" comparaison

set ansi_nulls off 
declare @a int = 1; 
declare @b int = null; 
select case when @a<>@b then 'diff' else 'equal' end '@[email protected] ?' --RETURNS 'diff' 

mais sans utiliser "set ansi_nulls off". Je suis venu avec ce qui suit, mais il est assez verbeux:

select 
    case 
    when @a is null  and @b is not null then 'diff' -- null x 
    when @a is not null and @b is null  then 'diff' -- x null 
    when @a is null  and @b is null  then 'equal' -- null null 
    when @a <> @b         then 'diff' -- x x 
    else 'equal' 
    end 

est-il un moyen plus court de le faire? Merci, Nestor

Répondre

1

coller à votre logique, et ne pas utiliser ISNULL ou COALESCE, essayez ceci:

select 
    case 
    when @[email protected]      then 'equal' -- x x 
    when @a is null and @b is null then 'equal' -- null null 
    else 'diff' 
    end 

ce qui est mieux que:

select 
    case 
    when @[email protected] OR COALESCE(@a,@b) is null then 'equal' 
    else 'diff' 
    end 
+1

Merci. Parfois, je pense que SQL devrait avoir un opérateur spécial pour les comparaisons non ansi. Droite? Quelque chose comme @a =? = @ B, @a @b ... – Nestor