Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнивание полей  [new]
Olga_dba
Member

Откуда:
Сообщений: 7
Здравствуйте!

Есть сравнение двух переменных:


if @t <> @t1
begin select 1 end

, при чем @t - NULL
,а @t1 - varchar(50)

Есть ли в Mssql указания что бы Unknown значения принимало значения True?
Ну возможно какой то SET_UNKNOWN_TRUE
что бы у меня отрабатывал запрос
if @t <> @t1
begin select 1 end
и выводило единицу
29 авг 12, 17:12    [13084037]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
SET ANSI_NULLS OFF
29 авг 12, 17:15    [13084060]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
SHok_by,

Из хелпа MS SQL 2008R2
В будущей версии параметр SQL Server ANSI_NULLS всегда будет иметь значение ON, а приложения, явно присваивающие ему значение OFF, будут вызывать ошибку. Избегайте использования этой функции в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.
29 авг 12, 17:19    [13084087]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
trew,

ага, но если человек будет это использовать он наверное прочитает в BOL что это.
или найдет другое решение, например
if (@t <> @t1) OR ((@t IS NULL AND @t1 IS NOT NULL) OR (@t IS NOT NULL AND @t1 IS NULL))
29 авг 12, 17:23    [13084114]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
TungusXan
Member

Откуда: Хочу туда где нет труда и каждый день зарплата! =)
Сообщений: 1686
if IsNULL(@t,'') <> IsNull(@t1,'')
begin select 1 end 
а вот так не подойдет?
29 авг 12, 17:24    [13084132]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
Olga_dba
Member

Откуда:
Сообщений: 7
Спасибо большое :)
я делаю так :
if ISNULL(convert(nvarchar(50),@t),'@#$%^&^&$$$') <> ISNULL(convert(nvarchar(50),@t1),'@#$%^&^&$$$')
begin select 1 end
29 авг 12, 17:26    [13084150]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
TungusXan
Member

Откуда: Хочу туда где нет труда и каждый день зарплата! =)
Сообщений: 1686
TungusXan
if IsNULL(@t,'') <> IsNull(@t1,'')
begin select 1 end 
а вот так не подойдет?



Невнимательно прочитал вопрос :)
Вот такой вариант может быть?
if IsNULL(@t,@t1) <> IsNull(@t1,@t)
begin select 1 end 
29 авг 12, 17:26    [13084153]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
Olga_dba
Member

Откуда:
Сообщений: 7
Нет не катит, я сравниваю два поля,
по сути в том и другом поле может быть NULL
29 авг 12, 17:39    [13084261]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
а так ?
if (ISNULL(convert(nvarchar(50),@t),'@#$%^&^&$$$') <> ISNULL(convert(nvarchar(50),@t1),'@#$%^&^&$$$')) OR (@t IS NULL AND @t1 IS NULL)
begin select 1 end
29 авг 12, 17:42    [13084287]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
TungusXan
Member

Откуда: Хочу туда где нет труда и каждый день зарплата! =)
Сообщений: 1686
С третьего раза понял чего вы хотите:) Тогда ваш вариант рабочий, но конверты ИМХО лишние. Переменные то и так varchar(50) и IsNull неважно какого типа в него переменная передается:)
29 авг 12, 17:43    [13084299]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
Olga_dba
Member

Откуда:
Сообщений: 7
) спасибо)
ну это не костыль:)?
а как нужно правильно делать? (хороший тон написания кода ещё требует его комментирование, как прокомментировать эти каракули? '%$#%^^@#$' ?))
по сути у меня там 100+ полей таким образом проверяется и я везде конверты вставила )
29 авг 12, 18:02    [13084450]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Olga_dba,

Вставляю свои 5 копеечек
declare @t varchar(50)= null ,
    @t1 varchar(50)= 'qwe'
if exists ( select  @t
            except
            select  @t1 ) 
    select  1 
else 
    select  0
29 авг 12, 18:10    [13084497]     Ответить | Цитировать Сообщить модератору
 Re: Сравнивание полей  [new]
Olga_dba
Member

Откуда:
Сообщений: 7
Круто)
спасибо огромное)
29 авг 12, 18:15    [13084544]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить