回答:
私は他の場所で解決策を見つけました:
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
使用master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)する代わりにmaster.dbo.fn_varbintohexstr、その後substringingの結果。
実際にfn_varbintohexstrはfn_varbintohexsubstring内部的に呼び出します。の最初の引数は、プレフィックスとしてfn_varbintohexsubstring追加する0xFかどうかを指定します。fn_varbintohexstr呼び出すfn_varbintohexsubstringと1内部的最初の引数として。
必要ないので0xF、fn_varbintohexsubstring直接お電話ください。
David Knightの言うことに反して、これらの2つの選択肢はMS SQL 2008で同じ応答を返します。
SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2)
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0))
したがって、バージョン2008以降、最初の方がより良い選択のようです。
ドキュメント化されていませんが、SP変数をハッシュしたストアドプロシージャ内で次のコードを使用した個人的な経験により、この例では、この組み合わせは100%機能します。
@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)