[SQL] Проверка на нуль?

Slavaga

Делаю что-то вроде этого:
SET @XID = (SELECT Employees.EmployeeID FROM Employees, Users WHERE
LastName = @XLastName AND
FirstName = @XFirstName AND
Patronymic = @XPatronymic AND
GroupID = (SELECT GroupID FROM Groups WHERE GroupName = 'Group1'
После выполнения SELECT'а либо возвращается одно число - идентификатор, либо ничего не возвращается.
Как узнать, что ничего не возвратилось?!
Можно сделать так:
IF EXISTS SELECT (...) SET @XID = (SELECT ...)
Можно ли как-нить покороче?

noss

Если ты, в случае пустого значения, захочешь присвоить своей переменной свое значение, то поможет ф-ция ISNULL(перем, знач подробнее в хелпе почитай
если этот запрос используется в хранимой процедуре или ф-ции, то просто потом обработай значение сам (if @X = NULL) и т.д.

Slavaga

Да, выражение используется в хранимой процедуре, но почему-то переменная не обрабатывается.
Делаю так:
PRINT 'DEBUG'
IF @XID = NULL PRINT 'NULL'
ELSE PRINT 'NOT NULL'
PRINT 'END DEBUG'
Результат:
DEBUG
NOT NULL
END DEBUG
Делаю так:
PRINT 'DEBUG'
IF @XID != NULL PRINT 'NOT NULL'
ELSE PRINT 'NULL'
PRINT 'END DEBUG'
Получаю:
DEBUG
NULL
END DEBUG
При том, что больше ничего не менялось!
Получается, что переменная не является ни NULL ни NOT NULL. Как это расценивать?!

Realist

Истинность выражения NULL==NULL есть NULL
Потому как NULL -- это ХЗ

zya369

IF @XID != NULL PRINT 'NOT NULL'
не знаю, как в мсскл (это же он:? но скажем в постгресе проверка на нулл делается так :


if (xid is [not] null)

noss

в mssql пишется так
IF @X IS NULL
SET @X = 0

Slavaga

Так и есть. Спасибо.

gopnik1994

ботаем троичную логику....

klimenta

да в mssql null != null (если не установлен ANSI_NULLS)
но при этом меня поле identity null не позволяет вводить два nullа

gopnik1994

это происходит по двум причинам:
1) MSSQL - недостойная СУ(Р)БД
2) Нехрен пихать NULL в identity (primary key) поле...

klimenta

ой я ощибся не identity а unique constraint
Оставить комментарий
Имя или ник:
Комментарий: