2016-02-19 57 views
0

我试图表的内容导出到XML,像这样:如何摆脱SQL中的XML“_x0040_”属性前缀?

CREATE TABLE TEMPTABLE_Results ([@Id] int) 

INSERT INTO TEMPTABLE_Results 
SELECT 1 as [@Id]; 

SELECT * FROM TEMPTABLE_Results 
FOR XML RAW('Node'), TYPE, XMLSCHEMA('Node') 

DROP TABLE TEMPTABLE_Results 

但结果有一个恼人的“x0040”中的属性前缀:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="Node" elementFormDefault="qualified"> 
    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" /> 
    <xsd:element name="Node"> 
    <xsd:complexType> 
     <xsd:attribute name="_x0040_Id" type="sqltypes:int" /> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
<Node xmlns="Node" _x0040_Id="1" /> 

我以前使用表格类型的变量,但根据this answer,当表格是临时时添加前缀;但即使使用常规表格,前缀仍然存在。

任何帮助,非常感谢。

回答

0

找到:无需为字段指定“@”以便将其作为属性而不是元素。

这产生所期望的结果:

CREATE TABLE TEMPTABLE_Results (Id int) 

INSERT INTO TEMPTABLE_Results 
SELECT 1 as Id; 

SELECT * FROM TEMPTABLE_Results 
FOR XML RAW('Node'), TYPE, XMLSCHEMA('Node') 

DROP TABLE TEMPTABLE_Results 

生成的XML是:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="Node" elementFormDefault="qualified"> 
    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" /> 
    <xsd:element name="Node"> 
    <xsd:complexType> 
     <xsd:attribute name="Id" type="sqltypes:int" /> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
<Node xmlns="Node" Id="1" />