如何摆脱XML" _x0040 _" SQL中的属性前缀?

时间:2016-02-19 19:59:30

标签: sql-server xml attr

我试图将表格的内容导出为XML,如下所示:

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,当表是临时表时会添加前缀;但即使使用常规表,前缀仍然存在。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

发现:无需指定&#34; @&#34;对于字段,以便将其作为属性而不是元素。

这产生了期望的结果:

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" />