【问题标题】:SQL Server 2000 and SQL Server 2008 queriesSQL Server 2000 和 SQL Server 2008 查询
【发布时间】: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


【解决方案1】:

没有直接的原因为什么应该表现不同。尝试在两者上运行此查询以比较结果集:

SELECT *
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 2K8 服务器存在其他配置问题。首先想到的是从表中删除的访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2010-12-18
    • 1970-01-01
    • 2016-03-25
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多