Я хочу извлечь имя столбца, значение и тип данных из xml.
DECLARE @Xml XML = (Select Top 1 T.* From(VALUES('John',26,GETDATE())) As T(Name,Age,DateOfJoin)
FOR XML RAW, ELEMENTS);
Select
ColumnName = T.X.value('local-name(.)', 'varchar(max)'),
ColumnValue = T.X.value('text()[1]', 'nvarchar(128)'),
DataType = '?'
From @Xml.nodes('/row/*') as T(X)
Выход:
![enter image description here](https://i.stack.imgur.com/oiloW.png)
Я могу получить тип данных в xml, но не могу разобрать.
DECLARE @Xml XML = (Select Top 1 T.* From(VALUES('John',26,GETDATE())) As T(Name,Age,DateOfJoin)
FOR XML RAW, ELEMENTS, XMLSCHEMA);
Select @Xml As XML
Выход:
![enter image description here](https://i.stack.imgur.com/5LjLU.png)
XML - Pretty Print:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" 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="row">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name">
<xsd:simpleType>
<xsd:restriction base="sqltypes:varchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreNonSpace IgnoreKanaType IgnoreWidth">
<xsd:maxLength value="4" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Age" type="sqltypes:int" />
<xsd:element name="DateOfJoin" type="sqltypes:datetime" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"><Name>John</Name><Age>26</Age><DateOfJoin>2019-01-13T16:28:40.903</DateOfJoin></row>