【发布时间】:2011-11-20 03:27:18
【问题描述】:
我们正在测试2008 sql server中的一个程序。此过程只有以下删除查询。
delete from dbo.tgrid_detl
where SOURCE_KEY in (
SELECT tg.SOURCE_KEY
FROM dbo.tgrid_detl tg
WHERE NOT EXISTS
(select *
FROM dbo.tgrid_stagging s,dbo.tgrid_detl tg
where cast(s.SUBMISSION_NO as varchar(18)) +
cast(year(s.POLICY_EFCTV_DT)as varchar) +
s.PRODCT_COVG_TYP_CD +
s.UW_SYSTEM_ID +
s.PRODUCT_ABBR +
s.PRODUCT_CD = tg.source_key
)
and tg.F_TRANS_CD = 'N'
and tg.UPDATE_ID is null
and tg.COMMENTS_UPDATE_DT is null
and tg.SOURCE_ID = 'EDW_SUB'
)
这在 SQL 2000 服务器中工作正常,但它没有删除 sql 2008 服务器中的行。您能否就此提出建议。谢谢。
【问题讨论】:
-
加入 tgrid_detl 的 tgrid_staging 子查询是否会在 2008 年的盒子上产生数据?这与您从 2000 db 返回的结果集不同吗?
-
您自己采取了哪些步骤来调试它?您是否尝试将子查询作为
select语句运行以查看它们是否返回相同的行? -
插入子查询返回相同的行。但是可以检查哪个配置,因为我知道我正在使用“IS NULL”来验证空值。那我还应该检查什么。
-
您知道使用隐式连接是一种 SQL 反模式,不是吗?这是一种非常糟糕的做法,您应该立即停止。
标签: sql sql-server-2008 sql-server-2000