2017-08-06 7 views
0

機能:「メッセージ8152、レベル16、状態10、10行目 文字列またはバイナリデータが切り捨てられる」HASHBYTESは、以下のスクリプトは、次のエラーメッセージが与え

select convert(varbinary(max),HASHBYTES('md2',(select [Secteur] 
    ,[Hub] 
    ,[Group] 
    ,[Enterprise] 
    ,[Manager] 
    ,[BM] 
    from [Hubs] for XML auto))) 

入力行の最大長は123バイトです。

このメッセージが表示される理由を教えてください。 (私はSQL Server 2014を使用しています)多くのありがとう

+0

公式ドキュメントは最大戻り値は、それが適宜 'varbinary型(最大8000バイト)' – TheGameiswar

+0

以上である、と言いますまた、「SQL Server 2014以前では、許可される入力値は8000バイトに制限されています。 –

+0

あなたのクエリには 'ORDER BY'も' WHERE'もありません。これは、テーブル全体をXMLに変換していることを意味します。行順序は決定的ではありません。おそらく、あなたがハッシュの入力として望むものではありません。データが変更されたかどうかを検出し、XML上でMD2ハッシュと結婚していないことを検出するメカニズムが必要な場合は、 'CHECKSUM_AGG'の使用を検討してください。 –

答えて

1

ハッシュバイトはSQL 2014およびそれ以前のバージョンでは8000文字に制限されています。 SQL 2016+ではこれに限定されません。私はあなたのクエリがXMLに変換されると8000バイト以上のものと思われます。

文書化されていないfn_repl_hash_binaryを使用すると、長い入力データの場合はsql 2014でMD5ハッシュ(MD2ではなく)を取得できますが、推奨しません。それは文書化されていないだけでなく、Azure SQLではまったく動作しません。

私はあなたがSQLに大きなバイナリデータのMD2を計算するCLR関数を使用する必要があると考えている2014年

関連する問題