【发布时间】:2011-11-14 21:59:24
【问题描述】:
我有一个表,该表由每日计划作业填充,该作业删除最后 7 天的数据,然后使用来自另一个源(大型机)的最近 7 天的数据重新填充。
最近,用户报告了许多重复数据,可追溯到 2011 年 10 月初。...数量级为数十万行。
我注意到为每个作业运行的删除有奇怪的行为:
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行受影响)”。
当我在用 SELECT * 替换 DELETE 后运行上述命令时,我得到 32,000 多行作为回报。
为什么 SELECT 和 DELETE 的行为会有所不同?
更新
这是实际的执行计划:
【问题讨论】:
-
调查这条线
AND (CONVERT(datetime,CASE WHEN ISDATE(pull_date)=0 THEN '19000101' ELSE pull_date END)) > DATEADD(day, -7, getdate()) -
桌子上有任何触发器吗?
-
您是否在同一登录名下运行
DELETE和SELECT?如果不是,请检查两个登录是否具有相同的dateformat设置(默认语言) -
只是为了澄清当你写“上面返回零行”时,你的意思是消息阅读
(0 row(s) affected) -
你能发布实际执行计划的 XML 版本吗?
标签: sql sql-server