SQL "ANSI_NULLS OFF" сравнение - PullRequest
       2

SQL "ANSI_NULLS OFF" сравнение

3 голосов
/ 30 сентября 2009

Я хочу проверить, отличается ли @a от @b в "ansi_nulls off":

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 Ответ

1 голос
/ 01 октября 2009

придерживаясь своей логики и не используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...