Что означает это предложение SQL WHERE?

Мне трудно понять следующее предложение WHERE в запросе T-SQL (SQL Server 2000/2005):

update #tempTable SET Total_Avg=isnull(TerminationReason,'terminated'), Individual_Subscriptions=null, Business_Subscriptions=null, Other_subscriptions=null, -- snip. 10 more fields set to NULL. PMIE_BI=null, Digital_Editions_BI=null where ( AbcTerminationDate<=dbo.fnGetPeriodFinalDate(@periodid) and (AbcTerminationDate!=19000101 or AbcTerminationDate is null) and (Total_Avg is not NULL or PrevTotalAvg is not NULL) ) 

В частности, второе предложение не имеет смысла для меня – это два подкласса, разделенных оператором OR, кажутся противоречивыми.

Поле AbcTerminationDate объявляется как INT NULL в таблице с именем Members . Я считаю, что дата 19000101 в системе означает NULL или значение по умолчанию или не имеет значения, т. Е. Что член НЕ завершен. Таким образом, в запросе отображается пустое поле или число, если элемент отмечен как завершенный, который будет, когда AbcTerminationDate имеет значение NULL или имеет значение по умолчанию.

Не зная какой-либо дополнительной информации, что вы от нее делаете?

Это похоже на противоречивость. Возможно, они имели в виду and !(AbcTerminationDate==19000101 or AbcTerminationDate is null) ?

Независимо от того, что означает 19000101, это не то же самое, что NULL в глазах базы данных. NULL – NULL. Если вы попытаетесь оценить любое другое значение в NULL, тогда это может стать проблематичным, потому что NULL означает «неизвестно». Например, 1 = NULL? Может, и так, может быть, и нет. На самом деле вы даже не можете сказать, что NULL = NULL, потому что каждый NULL неизвестен, поэтому может быть или не быть другим. Безопаснее явно проверять условия NULL.

EDIT: Как я указываю в своем комментарии, если NULL должны быть включены, то первая часть запроса исключает это. Вот как это должно быть написано, если должны быть включены NULL:

 ( ( ( AbcTerminationDate <= dbo.fnGetPeriodFinalDate(@periodid) AND AbcTerminationDate != 19000101 ) OR AbcTerminationDate is NULL ) AND (Total_Avg is not NULL or PrevTotalAvg is not NULL) ) 

Если «or» arg вне группы (), это будет отрицать:

 AbcTerminationDate<=dbo.fnGetPeriodFinalDate(@periodid) 

[править] В основном это говорит о том, чтобы принять любые результаты, которые истинны из этого 1-го предложения, и выполнить дополнительный фильтр, чтобы убедиться, что это не 19000101 или это значение null, являются, скорее всего, исключительными значениями для функции fnGetPeriodFinalDate для правильной оценки.

  • Завершение предложения where в sql-сервере
  • T-SQL: обеспечить порядок оценки выражения в инструкции WHERE
  • Выбрать Query не работает с WHERE clasue, когда в поле Column Name есть пробел
  • SQL Server, где в столбце where указано значение null
  • Использовать расчетный столбец в предложении where
  • SQL: где столбец не равен return result else result равно пустому значению
  • используя REPLACE в предложении WHERE для проверки перестановок орфографии - MS SQL
  • Использование CASE в сочетании с WHERE для указания разных столбцов для фильтрации по
  • Динамическое построение, в котором условие в выражении SQL
  • Название столбца sql isnull (), где
  • SQL Server - WHERE Классы для динамических столбцов
  • Interesting Posts

    Вопрос оптимизации запросов SQL Server

    Как вы проверяете наличие пользователя на SQL Server?

    как выбрать запись, которая отсутствует в другой связанной таблице, используя sql?

    Каков наилучший способ обработки дат bc в сервере .net / sql?

    Вычислить расстояние между точками, используя Long и Lat в SQL SERVER

    Нет плана запроса для процедуры в SQL Server 2005

    УДАЛИТЬ последний символ из строки, если последний символ – char (10) в SQL

    Возвращает выбранные строки в соответствии с максимальным значением без дублирования с использованием MS SQL

    SQL LocalDB и SQL Server CE

    Получение отдельной записи с использованием соединения в SQL

    Хранимая процедура MSSQL выбирает все столбцы

    Как настроить атрибуты столбца XML в T-SQL

    Использование команды SQL Server MERGE с той же исходной и целевой таблицей

    SQL Server: проблема с заменой существующего запроса на соединения

    Как установить значение поля даты и времени в настоящее время

    Давайте будем гением компьютера.