2017-08-28 102 views
0

我有以下sql代码来生成一个xml块。删除xml属性的错误代码 - MS SQL对于xml(_x003D)

SELECT top 1 
'http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0' AS [xmlns], 
(SELECT top 1 
count(*)AS 'number-of-accounts', 
-- 
-- TO DO 
-- 
FOR XML PATH('payment-import-header'), TYPE), 
FOR XML RAW ('consumer-payment-import-job'); 

的产出影响是这样的: enter image description here

我怎样才能从属性名称去掉 “_x003D” 的?如果我插入“=”或“@”,它会添加另一个随机值。我假设这些是错误标签。

感谢

+0

尝试此:https://docs.microsoft.com/en-us/sql/relational-databases/xml/add-namespaces- to-queries-with-with-xmlnamespaces – Alex

回答

1

您添加使用WITH XMLNAMESPACES第一个默认的命名空间,与DEFAULT关键字。

实施例:

WITH XMLNAMESPACES(DEFAULT 'http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0') 
SELECT 1 
FOR XML PATH('consumer-payment-import-job'); 

随着结果

<consumer-payment-import-job xmlns="http://www.crsoftwareinc.com/xml/ns/titanium/common/v1_0">1</consumer-payment-import-job> 
+0

感谢您的回应,这将为所有元素创建一个属性,我只希望它为consumer-payment-import-job。 –

+0

@aridi令人遗憾的是,如果在查询中有多个FOR XML条款,则没有简单的方法来做到这一点。有一个[微软连接问题,要求禁止向多个FOR XML条款的每个元素添加名称空间](https://connect.microsoft.com/SQLServer/feedback/details/265956/suppress-namespace-attributes -in嵌套选换XML语句)。如果你可以放弃它,也许他们会在将来做到这一点。 –

+0

@aridi解决方法涉及字符串函数顺便说一句,我相信你可以自己弄清楚。 –