Если у вас есть данные XML в SQL серверной переменной @XmlData
, вы можете использовать этот XQuery для получения имен столбцов ("заголовков"):
WITH XMLNAMESPACES ('http://schemas.xmlsoap.org/soap/envelope/' AS env, 'http://service.apiendpoint.com' AS ns2)
SELECT
XCol.value('(.)[1]', 'varchar(50)')
FROM
@XmlData.nodes('/env:Envelope/env:Body/ns2:getReportResultResponse/return/header/values/data') AS XHdr(XCol);
Это довольно просто, поскольку вы можете предположить, что каждый отдельный заголовок действительно является строкой (поэтому вы можете сделать вызов .value('(.)[1]', 'varchar(50)')
и быть в безопасности).
Однако для данных - как @Serg уже упоминалось в комментарий - если вы не можете как-то узнать (или выяснить), каковы типы данных элементов данных, это будет сложнее ... Используя тот же подход - предполагая, что все является строкой - будет работа - но тогда вы можете потерять ценную информацию о ваших битах данных:
WITH XMLNAMESPACES ('http://schemas.xmlsoap.org/soap/envelope/' AS env, 'http://service.apiendpoint.com' AS ns2)
SELECT
XCol.value('(.)[1]', 'varchar(50)')
FROM
@XmlData.nodes('/env:Envelope/env:Body/ns2:getReportResultResponse/return/records/values/data') AS XData(XCol)