2010-07-27 1 views
1

Использование служб интеграции SQL Server (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) перед сравнением привели к ошибке усечения.

Есть ли лучший способ сделать это, или я пропустил некоторые мелкие детали?

Thanks

+0

Вы пробовали лить его в int? – unclepaul84

ответ

1

Вы пробовали расширить длину за пределы 64? Я считаю, что DT_BYTES действителен до 8000 символов. Я проверил Допустимы следующие направления броска для DT_BYTES на основе books online article:

  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.

Я считаю, что другие пользователи правильно ответили на вашу проблему с «усечением».