我试图将表格的内容导出为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,当表是临时表时会添加前缀;但即使使用常规表,前缀仍然存在。
非常感谢任何帮助。
答案 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" />