为什么投它呢?只需将它们插入临时表中的XML列并运行Xquery以将它们与其他表进行比较。编辑:包括比较的例子。有很多种方法可以对XML运行查询以获得相同的行 - 查询写入的方式取决于首选项,需求等。我使用/ count作为简单组,但是可以使用自连接,WHERE EXISTS
针对正在搜索重复项的列,您将其命名。
CREATE TABLE #Test (SomeXML NVARCHAR(MAX))
CREATE TABLE #XML (SomeXML XML)
INSERT #Test (SomeXML)
VALUES('<root><book b="b" c="c" a="a"/></root>')
,('<root><book a="a" b="b" c="c"/></root>')
INSERT #XML (SomeXML)
SELECT SomeXML FROM #Test;
WITH XMLCompare (a,b,c)
AS
(
SELECT
x.c.value('@a[1]','char(1)') AS a
,x.c.value('@b[1]','char(1)') AS b
,x.c.value('@c[1]','char(1)') AS c
FROM #XML
CROSS APPLY SomeXMl.nodes('/root/book') X(C)
)
SELECT
a
,b
,c
FROM XMLCompare as a
GROUP BY
a
,b
,c
HAVING COUNT(*) >1
来源
2011-09-15 16:22:25
Wil
比较XML不仅仅是语法上的,而是基于XML文本表示的实际**含义**实际上是相当棘手的业务。我非常怀疑你可以在SQL Server中轻松完成这个任务 - 很可能你必须使用一个应用程序来解析和解释XML,以确定它是相同的还是不同的。一个简单的文本比较将不容易或足够...... –
请不要尝试在sql中滚动您自己的XML解析器。使用可以从您选择的语言中使用的已建立的一个。 –