2016-02-19 40 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" /> 
相關問題