2
我有一個SSIS包,它將一堆XML文件導入到SQL表中。一旦XML導入完成,我運行一個執行SQL任務來更新一些記錄,並導入其他不存在的其他記錄。其中一項任務根據他們的電話號碼創建用戶登錄。有時源數據有錯誤,未輸入數字或輸入重複數字。我無法控制數據輸入,但userlogon表當然需要唯一的值。SSIS中的陷阱錯誤行執行SQL任務
如何配置執行SQL任務以簡單地忽略PK違例錯誤並繼續執行下一條記錄?
這裏的SQL代碼:
insert into Logins
select REPLACE(LTRIM(REPLACE(Customer_Number, '0', ' ')), ' ', '0'), RIGHT(customer_number,4) + EFFDAT, Company_Name, Customer_Number, Email_Address, 0, CU_Allow_Web_Ordering, 0, 0, 1 from CUSTOMER_MASTER_FILE where CUSTOMER_NUMBER not in
(select CustomerNumber from Logins)
你有這種設置的方式我不確定有可能用SSIS捕獲錯誤(但我很想知道這是不正確的)。假設插入失敗,因爲轉換後的'Customer_Number'違反了'Logins'中的PK,但是請注意,您只是檢查存在的'CUSTOMER_NUMBER'的_untransformed_版本 - 並且根本不檢查空值,因爲您的問題表明您應該。此外,將這個檢查移出「WHERE」子句並轉換爲「LEFT JOIN」會更好。合理? – 2012-07-15 23:19:44
我明白你的意思了。我實際上發佈了錯誤的代碼,但我想要做的是類似的,只是從不同的來源插入到登錄表中。我改變了左連接,但當然我仍然受到PK違規的打擊。我想知道在SSIS中是否有一種方法可以完成我想要做的事情,只需要跳過帶有重複PK值的記錄即可。 – Kerberos42 2012-07-16 04:07:48
更新代碼: INSERT INTO LOGINS SELECT DISTINCT REPLACE(CDA_PHONE, ' - ', ''),LEFT(CDA_NAME,4)+ RIGHT(CDA_PHONE,4),CDA_NAME,CDA_CUSTOMER_NUMBER,CDA_EMAIL,1,CDA_ALLOW_WEB_ORDERING,0,0 ,如圖5所示,CDA_LOCATION_CODE FROM CUSTOMER_DELIVERY_ADDRESS LEFT JOIN LOGINS ON REPLACE(CDA_PHONE, ' - ', '')= USERID WHERE CDA_PHONE <> '000-000-0000' – Kerberos42 2012-07-16 04:12:26