2010-07-27 40 views
1

使用SQL Server Integration Services(SSIS)執行增量數據加載,比較待導入和現有行數據的哈希。我用這:SQL Server集成服務 - 增量數據加載哈希比較

http://ssismhash.codeplex.com/

創建SHA512哈希進行比較。當試圖比較數據導入哈希和使用條件性拆分任務(表達NEW_HASH == OLD_HASH)我在進入表達式收到以下錯誤從數據庫中已有的哈希:

The data type "DT_BYTES" cannot be used with binary operator "==". The type of one or both of the operands is not supported for the operation. To perform this operation, one or both operands need to be explicitly cast with a cast operator. 

嘗試在每列強制轉換爲字符串(DT_WSTR,64)會導致截斷錯誤。

有沒有更好的方法來做到這一點,還是我錯過了一些小細節?

謝謝

+0

你有沒有嘗試將它轉換爲int? – unclepaul84 2010-07-27 18:45:35

回答

1

你有沒有試過擴展超過64的長度?我相信DT_BYTES最多可以有8000個字符。我覈實了以下有效的投目的地的基礎上,books online article DT_BYTES:

  1. DT_I4
  2. DT_UI4
  3. DT_I8
  4. DT_UI8
  5. DT_STR
  6. DT_WSTR
  7. DT_GUID
  8. DT_IMAGE

我也在BIDS中運行了一個測試,並且驗證一旦我將它們轉換爲足夠長的數據類型,比較這些值就沒有問題。

1

SHA512有點像你的實際碰撞的機會是1^2^256。 SHA512總是輸出512位,即64個字節。我有類似的情況,我檢查傳入的二進制文件的散列。我使用查找轉換而不是條件拆分。

1

這個職位是舊的,但爲了幫助其他用戶...

答案是,在SSIS可以使用==操作符不能比擬的二進制數據。

我所看到的是人們經常將散列值轉換(並存儲)爲varchar或nvarchar,可以在SSIS中進行比較。

我相信其他用戶已正確回答您的問題與「截斷」。