答えて
入力の8k(または4kまたは2k)チャンクをハッシュし、それらのハッシュを連結したり、新しいハッシュ値にハッシュしたりすることができます。 SQL Serverの外部で作成されたハッシュを比較するために、類似のアルゴリズム(外部の.NETアプリケーションなど)を作成する必要がある場合、これは困難になる可能性があります。
もう1つのオプション:SQL ServerのCLR integrationに傾け、.NETアセンブリでハッシングを実行します。
ポールのアイデアのように、チャンク化には、各チャンクを別々のXML要素として、XML列にハッシュされた文字列を格納することが考えられます。
+1データの整合性のために、私は単一のハッシュ値を格納することを提案します(ハッシュのハッシュ)。XML構造では、ハッシュ値をN番目のチャンクのインデックスにマップする特別な属性が必要ですハッシュされたデータ –
あなたは、SQL CLR機能書くことができます:
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBinary BigHashBytes(SqlString algorithm, SqlString data)
{
var algo = HashAlgorithm.Create(algorithm.Value);
var bytes = Encoding.UTF8.GetBytes(data.Value);
return new SqlBinary(algo.ComputeHash(bytes));
}
をし、それは次のようにSQLで呼び出すことができます。長さは8K上であるかどう
--these return the same value
select HASHBYTES('md5', 'test stuff')
select dbo.BigHashBytes('md5', 'test stuff')
BigHashBytes
にのみ必要です。
CLR SPパラメータが8000バイトに自動的に切り捨てられるので注意してください。パラメータに '[SqlFacet(MaxSize = -1)]'を付けなければなりません。それを得るために私をしばらくかかった! – randomdude
-1(誤ってUTF-8を使用することになった) SQL Server(および一般的なWindows)はUTF-16を使用します。したがって、現在コードポイント0〜127、またはおそらく256までしか使用していない多くの人々にとっては、これはうまくいくように見えますが、UTF-8を使用すると次のような問題が発生します:[ComputeHashに基づくSQL CLR関数は(http://stackoverflow.com/a/35273859/577765) –
@randomdudeあなたの経験は、古いバージョンのSSDTがT-SQLラッパーオブジェクトをどのように生成したかによるものです。デフォルトでは 'SqlString'に' NVARCHAR(4000) 'を使い、' SqlChars'には 'NVARCHAR(MAX)'を使いました。しかし、Visual Studio 2013の時代の頃から、デフォルトは 'NVARCHAR(MAX)'を使用するように変更されました。それでも、あなたが言及しているように、明示的に '[SqlFacet()]'を使用する方が良いですが、新しいSSDTバージョンを使用している人はそれに踏み込めません。また、SQLCLRは 'NVARCHAR'だけをサポートしているので、実際には4000文字で切り詰めます:-)。 –
- 1. SQL Server STUFF - 8000を超える位置で作業する予定ですか?
- 2. バイナリのBlobを8000バイトに切り捨て - SQL Server 2008/varbinary(max)
- 3. ASP.NET MVC:maxRequestLengthを超えるアップロードの処理
- 4. Microsoft SQL Server管理スタジオの最大長は8000です
- 5. キューブ処理SQL Server Developer Edition
- 6. 範囲を超えてループを処理できる範囲
- 7. 上限65535バイトを超えるコンストラクタ
- 8. Clyther/OpenCLで65536を超える処理バッファー
- 9. SQL Server:インデックスまたはプライマリキーの合計サイズは900バイトを超えることはできません。
- 10. スパースビットベクトルのハッシュ処理
- 11. Pythonでバイトを処理する
- 12. ByteBufferでバイトを処理する
- 13. SQL Serverバッチエラー処理の問題
- 14. Sql Server 2005エラー処理 - 内部例外
- 15. パフォーマンスの問題 - 並列処理 - SQL Server
- 16. pcap_sendpacketで1500バイトを超えるパケットを送るには?
- 17. 型理論を超えて
- 18. SQL ServerのT-SQLエラー処理のベストプラクティスは何ですか?
- 19. SQL Server 2008 R2でエスケープ文字を処理する方法
- 20. SQL Server 2000で大きなテーブルのパフォーマンスを処理する
- 21. SQL Serverで季節データベース値のアーカイブを処理する方法
- 22. JavaScriptSerializer.MaxJsonLengthを超えました。これを処理するベストプラクティスは何ですか?
- 23. ストリームと未処理のバイト
- 24. nginxの最大サイズを超える、djangoの大量アップロードを処理する
- 25. maxrequestlengthを超えてアップロードされたファイルを処理できません
- 26. BizTalk Server 2013エラー処理の処理
- 27. SQL Serverの半球の制限を超えるポリゴンのチェック方法
- 28. ビットマップサイズを処理する方法がandroidのエラーを超えています
- 29. 画像処理/超薄型OCR
- 30. Mac OS XのGo 1.5で32768バイトを超えるスライスをgzipできない
ありがとうPaul、それは内部使用のための本当に良い解決策です。このケースでは、sha1 – SDReyes
@SDReyesに完全に準拠する必要があります。私の答えに追加された別のアイデア:SQL ServerのCLR統合に頼り、.NETアセンブリでハッシングを実行します。 –