現在、Active Directory ユーザー情報をデータベースにダンプするスクリプトを実行しています。
挿入を行うとき、すべての値を Varbinary(8000) 型の hashcode 列にハッシュします。この列は、変更されたレコードのみを更新するために、次回の実行時にハッシュを比較するために使用されます。現時点では、比較が完了すると、常に異なるものとして返されます。
スクリプトを基本的な例に減らしましたが、それでも同じ問題が発生します。(Enterprise person は、個人情報を保持するデータベース内のローカル テーブルです)
SELECT
SamAccountName
INTO
#TmpEnterprisePerson
FROM OPENQUERY(ADSI, 'SELECT SamAccountName
FROM ''LDAP://MyLdapDirectory''
WHERE SamAccountName = ''myAccount''')
select HashBytes('MD5',COALESCE(EP.SamAccountName, '') ) as originalHash
, HashBytes('MD5',COALESCE(T.SamAccountName, '')) as NewHash
, EP.SamAccountName as originalName
, T.SamAccountName as newName
, '"' + EP.SamAccountName + '"' as originalName2
, '"' + T.SamAccountName + '"' as newName2
, CAST(COALESCE(EP.SamAccountName, '') AS VARbinary(max)) as oriBinaryName
, CAST(COALESCE(T.SamAccountName, '') AS VARbinary(max)) as newBinaryName
, len(ep.samaccountName) as originallength
, len(T.samaccountName) as newLength
FROM
[dbo].[EnterprisePerson] AS EP
INNER JOIN #TmpEnterprisePerson T ON T.SamAccountName = EP.SamAccountName
where ep.SamAccountName= 'myAccount'
drop table #TmpEnterprisePerson
結果は次のとおりです
OriginalHash = 0xEB4A732C6372E7F1558D4C95E34CE6FF
NewHash = 0x82DDB9733D5A7532D1C2C734807BE756
OriginalName = MyAccount
NewName = MyAccount //Same as originalName
OriginalNam2 = "MyAccount"
NewName2 = "MyAccount" //Same as originalName2
oriBinaryName= 0x4C415245415541
newBinaryName= 0x4C00410052004500410055004100
OriginalLen = 7
NewLength = 7
ハッシュを比較するときに何が間違っているのか、なぜそれらが異なる結果になるのかわかりません