2011-09-19 5 views
-2

우리는 2008 sql 서버에서 프로 시저를 테스트하고 있습니다. 이 프로 시저에는 다음과 같은 삭제 쿼리 만 있습니다.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 Server 2008에서는 행을 삭제하지 않습니다. 이것에 대한 조언을 원하십니까? 감사.

+0

tgrid_daging에 가입 된 하위 쿼리는 2008 상자에서 데이터를 생성합니까? 이것은 2000 db에서 돌아 오는 결과 집합과 다른 것입니까? – Johnv2020

+2

직접 디버깅하기 위해 취한 조치는 무엇입니까? 하위 쿼리를'select' 문으로 실행하여 동일한 행을 반환하는지 확인해 보았습니까? –

+0

insertnal 하위 쿼리가 동일한 행을 되 돌리는 중입니다. 하지만 어떤 구성을 확인할 수 있습니다 내가 널 값을 확인하는 데 "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 서버에 다른 구성 문제가있는 경우. 테이블에서 삭제할 수있는 액세스 권한이 가장 먼저 떠오르게됩니다.