2011-09-19 265 views
-2

我們正在測試2008年sql server中的一個程序。此過程只有以下刪除查詢。SQL Server 2000和SQL Server 2008查詢

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服務器中的行。你能否就此提出建議?謝謝。

+0

tgrid_staging上的子查詢是否加入到tgrid_detl在2008盒子上產生數據?這是不同於你從2000分貝回來的結果集? – Johnv2020

+2

你採取了哪些步驟來爲自己調試?你有沒有嘗試運行子查詢作爲'select'語句來查看它們是否返回相同的行? –

+0

插入子查詢重排相同的行。但可以檢查哪些配置,按照我所知我正在使用「IS NULL」來驗證空值。那麼我應該檢查什麼。 – user863952

回答

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上。訪問權從表中刪除是首先想到的。