gpt4 book ai didi

sql - 在大型 XML 集上使用 HASHBYTES

转载 作者:行者123 更新时间:2023-12-01 15:39:39 24 4
gpt4 key购买 nike

我正在使用 SQL BrokerSQL CLR 将大量 XML 推送到我的企业服务总线 (ESB) 以供消费者使用拾取和处理。为了“审核” OUTGOING XML(我将其匹配)与服务总线接收的 XML(通过将两者保存到表中)。

保存大量的 XML 集很容易……没有问题。但是当我对 LARGE XML 值使用 HASHBYTES 时出现以下错误:

  • 字符串或二进制数据将被截断。

奇怪的是...

  • 转换为 VACHAR(MAX) 不是问题
  • 使用 HASHBYTES 是失败的

目标:
我需要对值进行散列处理或将它们简化为 CHECKSUM,以便可以轻松地验证它们。

因此,我如何才能将这些大的 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));

最佳答案

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

关于sql - 在大型 XML 集上使用 HASHBYTES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39192850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com