Sql server 如何在Sql Server中使用FOR XML抑制空名称空间
我们在SQLServer2005/2008中遇到了一个奇怪的问题,它使用了带有XML片段和名称空间的FORXML。这就是问题所在Sql server 如何在Sql Server中使用FOR XML抑制空名称空间,sql-server,xml,namespaces,for-xml,Sql Server,Xml,Namespaces,For Xml,我们在SQLServer2005/2008中遇到了一个奇怪的问题,它使用了带有XML片段和名称空间的FORXML。这就是问题所在 WITH XMLNAMESPACES ( DEFAULT 'http://tempuri.org/newincomingxml.xsd', 'http://tempuri.org/newincomingxml.xsd' as [xsi], 'http://tempuri.org/newincomingxml.xsd' as [a] ) SELECT [@a:S
WITH XMLNAMESPACES (
DEFAULT 'http://tempuri.org/newincomingxml.xsd',
'http://tempuri.org/newincomingxml.xsd' as [xsi],
'http://tempuri.org/newincomingxml.xsd' as [a]
)
SELECT
[@a:Source], [AddressCount], [ConsumerCount], [EmailCount], [PermissionCount]
, (
SELECT
[Consumer]
FROM tbcExportBRC_Current xmlmaster
FOR XML PATH(''), ROOT('Consumers'), TYPE
)
FROM tbcExportBRCBatch_Current xmlroot
FOR XML PATH('Datafeed'), TYPE
[Customer]字段是一个xml片段。当我运行这个时,我得到了
<Datafeed xmlns:a="http://tempuri.org/newincomingxml.xsd" xmlns:xsi="http://tempuri.org/newincomingxml.xsd" xmlns="http://tempuri.org/newincomingxml.xsd" a:Source="DSD">
<AddressCount>0</AddressCount>
<ConsumerCount>0</ConsumerCount>
<EmailCount>0</EmailCount>
<PermissionCount>0</PermissionCount>
<Consumers xmlns:a="http://tempuri.org/newincomingxml.xsd" xmlns:xsi="http://tempuri.org/newincomingxml.xsd" xmlns="http://tempuri.org/newincomingxml.xsd">
<Consumer>
<ConsumerType xmlns="">Individual</ConsumerType>
<FirstName xmlns="">STEVE</FirstName>
<LastName xmlns="">SMITH</LastName>
</Consumer>
</Consumers>
</Datafeed>
它删除了xmlns=“”,但我们需要将其保留在文件中。有什么想法吗?结果是正确的。在表中,您有没有名称空间的元素,因此当您将它们添加到Consumers元素下时,默认名称空间为xmlns=”http://tempuri.org/newincomingxml.xsd“,表中的元素必须将默认命名空间覆盖回”“。” 这正是你应该看到的。没有xmlns=“”将意味着ConsumerType/FirstName/LastName元素位于命名空间“”中,这是false
您可能要做的是将ConsumerType/FirstName/LastName元素移动到“”命名空间中,以匹配父Consumer元素的命名空间。您所说的很有道理。我编辑我的原创文章是因为我意识到我在消费者专栏中的片段不正确。我如何指定它所属的名称空间而不在每一行上加上xmlns=“”?
…
<ConsumerType>Individual</ConsumerType>
<FirstName>STEVE</FirstName>
<LastName>SMITH</LastName>
DEFAULT 'http://tempuri.org/newincomingxml.xsd',