У меня есть таблица, которая заполняется ежедневным запланированным заданием, которое удаляет данные за последние 7 дней, а затем повторно заполняется данными из другого источника (мэйнфрейма) за последние 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
Вот фактический план выполнения: