У меня следующий запрос:
UPDATE #Temp_SessionItem SET [Status] =
CASE
WHEN ([AddressFK] IS NULL OR [StatusFK] IS NULL) AND [Status] = 1
THEN 3
WHEN [AddressFK] IS NOT NULL AND [StatusFK] IS NOT NULL AND [Status] = 1
THEN 2
END
Проблема в том, что когда он выполняется, он на самом деле не дает ожидаемого результата. то есть он не устанавливает значение поля [Status
] на 3 в случае, если [AddressFK
] или [StatusFK
] равно NULL
. Вместо этого он просто пытается добавить NULL
в Status, когда должен добавить 3.
Если я удаляю часть выражения AND [Status] = 1
, она возвращает 3, но затем обновляет также значения, не являющиеся [Status] = 1
.
Есть что-нибудь очевидное, что я здесь скучаю?
Я использую SQL Server 2008.
EDIT:
После того, как Рой Намир указал мне, я понял, что проблема должна заключаться в хранимой процедуре, в которой выполняется этот запрос. В частности, #Temp_SessionItem - это просто временная таблица. После указанного выше запроса я пытаюсь обновить исходную таблицу следующим запросом:
-- update the status of the original session item table
UPDATE UploadSessionItem SET [Status] = T.[Status]
FROM #Temp_SessionItem AS T
WHERE UploadSessionItem.UploadSessionItemId = T.ID
.. что, очевидно, не работает, так как все [Status
] элементы все еще 1