【发布时间】:2011-10-13 08:54:15
【问题描述】:
考虑以下 SQL:
;WITH XMLNAMESPACES(DEFAULT 'http://www.mynamespace.co.uk')
,CTE_DummyData AS (
select id=1
)
select TOP 1
[@ID]=1,
(select top 1 [@ID] = 1 FROM CTE_DummyData FOR XML PATH ('Child'), TYPE)
from CTE_DummyData
FOR XML PATH ('Parent')
Thie 返回 xml:
<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
<Child xmlns="http://www.mynamespace.co.uk" ID="1" />
</Parent>
我需要的是仅在根元素上返回带有 xmlns 声明的 xml。例如:
<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
<Child ID="1" />
</Parent>
有没有办法做到这一点?
注意: 上面的 SQL 是对实际代码的极端简化,它会生成一个复杂的文档,因此如果不给我几天额外的工作要做,从 FOR XML PATH 进行更改并不是一个真正的选择。要明确在整个文档的顶层需要有NS,并且所有的孩子都应该没有。
【问题讨论】:
-
我找不到办法,但它们的意思应该是一样的——为什么不能用第一种形式?
-
@Damien:这是数据迁移过程的一部分。虽然第一个文档的含义相同(如您所说),但当我们将它传递给(第三方)导入 Web 服务时它不起作用。我认为问题在于它使用子查询。如果您使用单个查询,并使用
[Child/@ID]定义 Child 元素,它可以正常工作,但这需要重新考虑代码(我已经继承)
标签: xml tsql for-xml-path