Какова цель IsNull в этом запросе? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть настольное приложение, которое я преобразовываю в веб, и у меня возникают проблемы с пониманием цели частей запроса IsNull. Запрос для Ms SQL, и я знаю, что у него есть функция IsNull, но это не так. Так что я смущен относительно его цели. Ниже мой запрос:

UPDATE tb_category
SET 
Email = @Email, 
CandidateID = @CandidateID, 
Code = @Code, 
TestDate = @TestDate, 
Description = @Description, 
PointsEarned = @PointsEarned, 
PointsAvailable = @PointsAvailable, 
Average25th = @Average25th, 
Average75th = @Average75th, 
ImportedDate = @ImportedDate, 
CreationDate = @CreationDate, 
TestNum = @TestNum, 
CategoryNum = @CategoryNum 
WHERE ((Email = @Original_Email) 
AND (CandidateID = @Original_CandidateID) 
AND (Code = @Original_Code) 
AND (TestDate = @Original_TestDate) 
AND ((@IsNull_Description = 1 AND Description IS NULL) OR (Description = @Original_Description)) 
AND (PointsEarned = @Original_PointsEarned) 
AND ((@IsNull_PointsAvailable = 1 AND PointsAvailable IS NULL) OR (PointsAvailable = 
@Original_PointsAvailable)) 
AND ((@IsNull_Average25th = 1 AND Average25th IS NULL) OR (Average25th = @Original_Average25th)) 
AND ((@IsNull_Average75th = 1 AND Average75th IS NULL) OR (Average75th = @Original_Average75th)) 
AND ((@IsNull_ImportedDate = 1 AND ImportedDate IS NULL) OR (ImportedDate = @Original_ImportedDate)) 
AND ((@IsNull_CreationDate = 1 AND CreationDate IS NULL) OR (CreationDate = @Original_CreationDate)) 
AND (TestNum = @Original_TestNum) 
AND (CategoryNum = @Original_CategoryNum));

Я попытался упростить оператор обновления, удалив разделы IsNull, но это не сработало.

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Я вижу, что этот шаблон повторяется несколько раз в предложении WHERE:

@IsNull_Description = 1 AND Description IS NULL

Это означает, что переменная @IsNull_SomeColumnName, которая предположительно установлена ​​ранее в коде, имеет значение 1, а столбец, к которому относится переменная, в настоящее время NULL.

Функция IsNull(Param1, Param2) используется для замены значения второго параметра значением первого параметра, если первый параметр IS NULL, и функция возвращает значение Param2.

На SQL сервере и многих других РСУБД синтаксис IS NULL используется для проверки, является ли значение в настоящий момент NULL. Здесь Description IS NULL вернет TRUE, если Description равно нулю, и FALSE, если нет.

0 голосов
/ 10 марта 2020

В SQL null не равен (=) чему-либо - даже не другому null, поэтому в вашем запросе в случае, если оба значения являются нулевыми (старым и новым), вам необходимо принять это во внимание и проверить значения со значением NULL.

...