Testujemy procedurę na serwerze sql 2008. Ta procedura ma tylko następujące kwerendy usuwania.
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"
)
Działa to dobrze na serwerze SQL 2000, ale nie powoduje usunięcia wiersza w serwerze sql 2008. Czy możesz prosić o radę w tej sprawie. Dzięki.
Odpowiedzi:
1 dla odpowiedzi № 1Nie ma bezpośredniego powodu, dla którego powinien zachowywać się inaczej. Spróbuj uruchomić to zapytanie na obu, aby porównać zestawy wyników:
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"
);
Jeśli wyniki są takie same, masz inny problem konfiguracyjny na serwerze SQL 2K8. Prawa dostępu do usuwania ze stołu to pierwsze, co przychodzi mi do głowy.