3

hashbytesコマンドを使用してSQLサーバーr2の列を更新しようとしています。コマンドの簡略化されたバージョンは次のとおりです。

COMMAND: "UPDATE [tbl] SET [checksum] = HASHBYTES('MD5',[field1])"

問題は、次のような奇妙な文字をすべてのフィールドに書き込むことです。

"˜Iý¸¶C"KéS©c"

ただし、(同じフィールドを使用して)選択を行う場合:

select HASHBYTES('MD5',[field1]) from [tbl];

正しい文字列を返します。

0x9849FDB80C17B64322DA094BE963A963

なぜそれがこれを行うのか誰もが知っています。テストデータベースを試してみましたが、updateコマンドは期待どおりに機能します。ただし、本番サーバーでは機能しません。

4

1 に答える 1

4

これを取得する理由は、HASHBYTESがバイナリデータ型を返し、これがテキストではないためです。

組み込み関数fn_varbintohexstrを使用すると、次のようにバイナリデータをテキストに変換できます。

UPDATE [tbl] SET [checksum] = master.dbo.fn_varbintohexstr(HASHBYTES('MD5',[field1]))
于 2013-03-18T15:46:13.280 に答える