我的源代码在 SQL Server 中;我的目标是雪花。目标表是通过仅从源中提取 XML 列创建的。我需要比较源和目标中的前 20 行以查看数据是否匹配。我需要 20 行的顺序相同。我用这个查询了 SQL Server 中的源代码:
SELECT TOP 20
COLUMN_XML
FROM TABLE_NAME
ORDER BY COLUMN_XML;
我收到此错误消息:
XML 数据类型无法进行比较或排序,除非使用 IS NULL 运算符。
我想知道是否有人可以告诉我是否可以以某种方式查询源和目标中 XML 列中的前 20 行,以便它们的顺序相同?
总体
这似乎是一个非常糟糕的设计选择。将 XML 解析为适当的规范化表以进行比较会更明智。XML 只是那些红头数据类型中的一种,它比其他数据类型有更多的限制。
你可以使用下面的例子来做你想做的事,但它可能会表现得非常糟糕。
如果我是你,我会认真地重新考虑这种方法。
极不可能,因为 SQLServer 说“不”。
XML 只是一大块文本,尝试按大块文本排序可能会[非常]糟糕。
XML 是一种复合数据类型。
它由更小的位组成,按这些“位”中的一个 [或多个] 排序可能有意义,而不是按整个排序。正如 Erik 所说,您最好将 [至少其中一部分] 规范化为更合理的关系结构。
XML 在其定义和/或实现中也可能是一个很大的“毛茸茸的”。
属性是键值对的正式无序列表,因此,虽然 XML 会认为这两者是等价的,但将它们排序为文本不会!