我正在使用SQL Broker
& SQL CLR
将大量XML
推送到我的企业服务总线(ESB),供消费者接听和处理。为了"审计" OUTGOING XML(我匹配)与服务总线的XML RECEIVED(通过将两者保存到表中)。
保存大量的XML很容易......没有问题。但是当我在LARGE XML值上使用HASHBYTES时,我收到以下错误:
...奇怪
目标:
我需要HASH值或将它们缩减为CHECKSUM,以便轻松验证它们。
因此,我如何将这些大的XML值哈希或减少为一个(小)值,这可以很容易地和视觉验证?
SAMPLE TESTER:
在这个问题中插入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 :(得分: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