2016-08-28 12 views
3

私は & 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)); 
    
  • +0

    本当に失敗しますか?私はあなたのコードをコピーしてSSMSに貼り付け、失敗すると予想されるクエリを処理しました。また、今後のSQL Serverのバージョンではhasihngアルゴリズムがサポートされなくなると思います。ソース:https://msdn.microsoft.com/en-us/library/ms143729.aspx –

    +0

    カウントを1000に変更してください...失敗します –

    答えて

    2

    HASBYTEは、VARCHARなくVARCHAR(MAX)を受け入れますデータを切り捨て、切り捨てエラーが発生する可能性があります。あなたのデータが8000バイトを超える場合は、独自の関数を作成する必要があります。https://dba.stackexchange.com/questions/10132/has-somebody-got-a-function-that-will-extend-hashbytes-to-strings-of-arbitrary-l

    +0

    レコード用:私はSQL CLRパスを選択しました。ありがとう。 –

    関連する問題