1
去年,我們有一位開發者離開了我們......他是一個偉大的開發者!作爲一名DBA,我非常喜歡在球隊中擁有他! 但是我碰到這段代碼來自他:校驗和用於合併?
when matched and
checksum(TARGET.Lead_ID, TARGET.Salesforce_id) <> checksum(SOURCE.Lead_ID,SOURCE.Salesforce_id)
or checksum(TARGET.Lead_ID, TARGET.CreatedById) <> checksum(SOURCE.Lead_ID,SOURCE.CreatedById)
or checksum(TARGET.Lead_ID, TARGET.Email) <> checksum(SOURCE.Lead_ID,SOURCE.Email)
or checksum(TARGET.Lead_ID, TARGET.LastModifiedById) <> checksum(SOURCE.Lead_ID,SOURCE.LastModifiedById)
or checksum(TARGET.Lead_ID, TARGET.ConvertedContactId) <> checksum(SOURCE.Lead_ID,SOURCE.ConvertedContactId)
or checksum(TARGET.Lead_ID, TARGET.ConvertedDate) <> checksum(SOURCE.Lead_ID,SOURCE.ConvertedDate)
or checksum(TARGET.Lead_ID, TARGET.ConvertedOpportunityId) <> checksum(SOURCE.Lead_ID,SOURCE.ConvertedOpportunityId)
or TARGET.IsConverted <> SOURCE.IsConverted
or checksum(TARGET.Lead_ID, TARGET.Mini_West_Local_Marketing__c) <> checksum(SOURCE.Lead_ID,SOURCE.Mini_West_Local_Marketing__c)
or checksum(TARGET.Lead_ID, TARGET.Valid_Leads__c) <> checksum(SOURCE.Lead_ID,SOURCE.Valid_Leads__c)
or checksum(TARGET.Lead_ID, TARGET.FE_Owner__c) <> checksum(SOURCE.Lead_ID,SOURCE.FE_Owner__c)
or checksum(TARGET.Lead_ID, TARGET.FE_Sales_Group__c) <> checksum(SOURCE.Lead_ID,SOURCE.FE_Sales_Group__c)
我知道校驗:「返回,或在表達式列表上計算一個表中的行校驗和值。 CHECKSUM旨在用於構建散列索引。'。
但是,爲什麼他會在那裏使用它?
注:(這是代碼的一部分,真正的「當匹配」子句中有100列,源和目標有100列...)
謝謝Kittoes0124!我認爲你是對的,但更多...我們正在使用的合併源是:「從SourceTable Where UpdateDate> @LastUpdateDate」...因此不需要做任何檢查:如果記錄被拉取並匹配,因爲它已經在源代碼中更新......我將它更改爲「當匹配時更新」......任何潛在的問題/警告我可能會丟失?我將完全依靠在源代碼中正確使用UpdateDate。 – Chicago1988
@芝加哥1988如果你確實知道沒有必要執行檢查,那麼不要。如果您已經在流程的早期階段花費了CPU週期,那麼現在就沒有意義了。我只在不知道傳入值是否有差別的情況下才使用'exists' /'except'模式**和**我想避免因某種原因(審計,大小)對未更改的列進行變異。 – Kittoes0124