![](/img/trans.png)
[英]How do I suppress T-SQL warnings when running a script SQL Server 2005?
[英]How do I suppress empty namespaces with FOR XML in Sql Server
使用FOR XML以及xml和名称空间片段的SQL Server 2005/2008,我们遇到一个奇怪的问题。 这是有问题的查询。
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 =“” 。 如果我们直接在表中查看该片段,则它看起来像这样。
<ConsumerType>Individual</ConsumerType>
<FirstName>STEVE</FirstName>
<LastName>SMITH</LastName>
我可以删除默认名称空间
DEFAULT 'http://tempuri.org/newincomingxml.xsd',
它删除了xmlns =“”,但我们需要将其保留在文件中。 有任何想法吗?
结果是正确的。 在表中,您有没有命名空间的元素,因此,当您将它们添加到具有默认命名空间xmlns =“ http://tempuri.org/newincomingxml.xsd”的Consumers元素下时 ,表中的元素必须覆盖默认命名空间回到 ””。
那正是您应该看到的。 没有xmlns =“”表示ConsumerType / FirstName / LastName元素位于名称空间“ http://tempuri.org/newincomingxml.xsd ”中,这是错误的。
您可能希望将ConsumerType / FirstName / LastName元素移动到“ http://tempuri.org/newincomingxml.xsd ”命名空间中,以匹配父Consumer元素的命名空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.