私は & SQL CLR
を使用して、XML
の大きなセットを消費者がピックアップして処理するエンタープライズサービスバス(ESB)にプッシュします。 XMLをOUTGOING(私はそれに合わせる)をサービスバスが(両方をテーブルに保存することによって)XMLで受信したものと「監査する」ために。大規模XMLセットでHASHBYTESを使用
XMLの大量のセーブは簡単です...問題はありません。しかし、私は大きなXML値でHASHBYTESを使用すると、次のエラーが発生します。
- 文字列またはバイナリデータが切り捨てられます。私が必要
:奇妙
は... VACHAR(MAX)への変換
- HASHBYTESが
GOAL失敗したものです使用して問題
このように、これらの大きなXML値を簡単に&が視覚的に検証できる単一の(小さな)値にハッシュまたは削減するにはどうすればよいですか?
SAMPLEテスター:
この質問にLARGE XMLを挿入するにはあまりにも面倒になるので、私は問題を複製ミニスクリプトを含めています:
DECLARE @ContextCount INT = 1000;
----------------
---- Build the LARGE XML
----------------
DECLARE @Count INT = 1;
DECLARE @Xml NVARCHAR(MAX) = '<Contexts>';
WHILE (@Count <= @ContextCount)
BEGIN
SET @Xml = @Xml + '<Context><Name>SomeTableName</Name><Key><SomeColumnName>' + CONVERT(VARCHAR(10), @Count) + '</SomeColumnName></Key></Context>'
SET @Count = @Count + 1
END
SET @Xml = @Xml + '</Contexts>'
----------------
---- Build the LARGE XML
----------------
-- THIS WORKS
SELECT CONVERT(VARCHAR(MAX), @Xml)
-- THIS FAILS
SELECT HASHBYTES('MD5', CONVERT(VARCHAR(MAX), @Xml));
本当に失敗しますか?私はあなたのコードをコピーしてSSMSに貼り付け、失敗すると予想されるクエリを処理しました。また、今後のSQL Serverのバージョンではhasihngアルゴリズムがサポートされなくなると思います。ソース:https://msdn.microsoft.com/en-us/library/ms143729.aspx –
カウントを1000に変更してください...失敗します –