SQL“ANSI_NULLS OFF”比较

时间:2009-09-30 19:51:39

标签: sql tsql

我想在“ansi_nulls off”中检查@a是否与@b不同:

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

但不使用“set ansi_nulls off”。我想出了以下内容,但它非常详细:

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

有更短的方法吗? 谢谢, 内斯特

1 个答案:

答案 0 :(得分:1)

坚持你的逻辑,而不是使用ISNULL或COALESCE,试试这个:

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

但这更好:

select
  case 
     when @a=@b OR COALESCE(@a,@b) is null then 'equal'
     else 'diff'
  end