Sor konvertálás key-value párosra egyszerűen

Időnként szükség lehet oszlopkat sorokra konvertálni. Persze, jó az unpivot, de ha nincs semmi speciálisra szükségünk, csak egyszerű key-value párokra, akkor van egy sokkal univerzálisabb megoldás: xml oda vissza konvertálás.

Lássuk mire gondolok.

 

select
    [name],
    [state_desc],
    [user_access_desc],
    [page_verify_option_desc],
    [log_reuse_wait_desc]
from sys.[databases]
where [database_id] = 1

 

És akkor az univerzális query amiben csak a lekérdezésnek kell módosuljon:

 

declare @xml_data xml = (
select
    [name],
    [state_desc],
    [user_access_desc],
    [page_verify_option_desc],
    [log_reuse_wait_desc]
from sys.[databases]
where [database_id] = 1
for xml path
)

select
    t.c.value('local-name(.)', 'nvarchar(255)') as [Key],
    t.c.value('(.)[1]', 'nvarchar(255)') as [Value]
from @xml_data.nodes('//row/*') t(c)

 

 

Ennyire egyszerű 🙂

Hozzászólás