这个让我快打败了。以下是存储过程中的代码,如果重复运行,将继续 1) 无法识别匹配行和 2) 插入新的相同行。源表和目标表中 SERV_LINE_ID 和 TYPE_OF_SERVICE 的值和数据类型是相同的。同样,这种行为是可重复的;即使在删除有问题的行之后。其他删除的行被替换,但在第一次运行后被识别。
INSERT INTO etl.TargetTable
(CUSTOMER_NUMBER,
PCN,
VISN,
VA_FACILITY,
AUTHORIZATION_NUMBER,
VAMC,
CLINXX,
BEGIN_DOS,
BILLED_AMOUNT,
DATE_SUBMITTED,
VA_FORM_TYPE,
VETERAN_LAST_NAME,
VETERAN_FIRST_NAME,
VETERAN_SS,
TYPE_OF_SERVICE,
ENDING_DOS,
CATEGORY_CARE,
AUTH_TYPE,
SERVICE_LINE_ID,
SERVICE_LINE_CHARGE_AMOUNT,
LAST_EXPORT,
SYSISEXPORTED,
SYSISDELETED,
SYSCHECKSUM,
SERV_LINE_ID)
SELECT s.CUSTOMER_NUMBER,
s.PCN,
s.VISN,
s.VA_FACILITY,
s.AUTHORIZATION_NUMBER,
s.VAMC,
s.CLINXX,
s.BEGIN_DOS,
s.BILLED_AMOUNT,
s.DATE_SUBMITTED,
s.VA_FORM_TYPE,
s.VETERAN_LAST_NAME,
s.VETERAN_FIRST_NAME,
s.VETERAN_SS,
s.TYPE_OF_SERVICE,
s.ENDING_DOS,
s.CATEGORY_CARE,
s.AUTH_TYPE,
s.SERVICE_LINE_ID,
s.SERVICE_LINE_CHARGE_AMOUNT,
NULL,
0,
0,
s.SYSCHECKSUM,
s.SERV_LINE_ID
FROM ##Source s
LEFT OUTER JOIN etl.TargetTable t
ON s.SERV_LINE_ID = t.SERV_LINE_ID
AND s.TYPE_OF_SERVICE = t.TYPE_OF_SERVICE
AND s.DATE_SUBMITTED <= '2018-10-10'
WHERE t.SERV_LINE_ID IS NULL