Настройка таблицы макет с вашими значениями
DECLARE @tbl TABLE (
ID INT IDENTITY PRIMARY KEY ,
[NAME] VARCHAR(10),
[ADDRESS] VARCHAR(10)
);
INSERT INTO @tbl VALUES ('ABC','INDIA')
,('one','more')
- Этот подход использует CROSS APPLY
с VALUES()
для создания производного набора результатов
- Вам нужнозаранее знать имена столбцов, и вы должны привести их к общему типу
SELECT A.*
FROM @tbl t
CROSS APPLY (VALUES('ID',CAST(t.ID AS NVARCHAR(100)))
,('NAME',CAST(t.[NAME] AS NVARCHAR(100)))
,('ADDRESS',CAST(t.[ADDRESS] AS NVARCHAR(100)))) A(ColumnName,ColumnValue)
- этот подход полностью универсален и работает с любым набором и типом
SELECT AllCols.value('local-name(.)','nvarchar(max)') AS ColumnName
,AllCols.value('text()[1]','nvarchar(max)') AS ColumnValue
FROM
(
SELECT * FROM @tbl FOR XML PATH('row'),TYPE
) A(AsXml)
CROSS APPLY A.AsXml.nodes('/row/*') B(AllCols)
Идеяпозади это читать select как XML и использовать общие возможности XQuery
:
<row>
<ID>1</ID>
<NAME>ABC</NAME>
<ADDRESS>INDIA</ADDRESS>
</row>
<row>
<ID>2</ID>
<NAME>one</NAME>
<ADDRESS>more</ADDRESS>
</row>