У меня есть таблица, заполняемая ежедневным запланированным заданием, которое удаляет последние 7 дней данных, а затем повторно заполняет семь последних дней стоимостью данных из другого источника (мэйнфрейм).
Недавно пользователи сообщили о нескольких дубликатах, которые восходят к началу октября 2011 года.... по величине сотен тысяч строк.
Я заметил странное поведение с удалением, которое выполняется для каждого задания:
DELETE FROM fm104d
WHERE location = '18'
AND (CONVERT(datetime,CASE WHEN ISDATE(pull_date)=0 THEN '19000101'
ELSE pull_date END)) > DATEADD(day, -7, getdate())
Приведенное выше значение возвращает "(пострадали 0 строк)".
Когда я запускаю вышеуказанное после замены DELETE на SELECT *, я получаю 32 000 + строк взамен.
Почему SELECT и DELETE ведут себя по-другому?
UPDATE
Вот реальный план выполнения: