You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

插入操作中XML文档节点顺序能否与Identity列顺序保持一致?

问题解答

不能保证dst表的identity列顺序与原XML文档中的节点顺序完全一致。

SQL Server处理CROSS APPLY xmlcolumn.nodes('blah')时,即便多数情况下节点会按XML中的顺序返回,但官方并未承诺这种顺序会被严格保障。当查询优化器选择不同执行计划(比如启用并行执行)时,返回行的顺序可能发生偏移,导致identity列生成的值无法对应原XML的节点顺序。

如果需要严格保留XML节点的原始顺序,必须从XML中提取明确的排序信息。比如利用XML节点的位置生成序号,再以此序号作为插入时的排序依据,示例代码如下:

INSERT INTO dst (blah, node_sequence)
SELECT 
    x.n.value('(./text())[1]', 'varchar(100)') AS blah,
    -- 获取节点在父节点中的位置序号
    x.n.value('for $i in . return count(../*[. << $i]) + 1', 'int') AS node_sequence
FROM src
CROSS APPLY xmlcolumn.nodes('blah') AS x(n)
ORDER BY node_sequence;

通过显式的排序字段控制插入顺序,才能确保最终identity列的顺序与原XML节点顺序一致。

内容的提问来源于stack exchange,提问作者Cade Roux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:09:22