Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Meratakan tabel 1 baris menjadi tabel pasangan nilai kunci

Sebuah versi di mana tidak ada dinamika yang terlibat. Jika Anda memiliki nama kolom yang tidak valid untuk digunakan sebagai nama elemen dalam XML, ini akan gagal.

select T2.N.value('local-name(.)', 'nvarchar(128)') as [Key],
       T2.N.value('text()[1]', 'nvarchar(max)') as Value
from (select *
      from TableA
      for xml path(''), type) as T1(X)
  cross apply T1.X.nodes('/*') as T2(N)

Contoh yang berfungsi:

declare @T table
(
  Column1 varchar(10), 
  Column2 varchar(10), 
  Column3 varchar(10)
)

insert into @T values('V1','V2','V3')

select T2.N.value('local-name(.)', 'nvarchar(128)') as [Key],
       T2.N.value('text()[1]', 'nvarchar(max)') as Value
from (select *
      from @T
      for xml path(''), type) as T1(X)
  cross apply T1.X.nodes('/*') as T2(N)

Hasil:

Key                  Value
-------------------- -----
Column1              V1
Column2              V2
Column3              V3

Perbarui

Untuk kueri dengan lebih dari satu tabel, Anda dapat menggunakan for xml auto untuk mendapatkan nama tabel dalam XML. Catatan, jika Anda menggunakan alias untuk nama tabel dalam kueri, Anda akan mendapatkan alias sebagai gantinya.

select X2.N.value('local-name(..)', 'nvarchar(128)') as TableName,
       X2.N.value('local-name(.)', 'nvarchar(128)') as [Key],
       X2.N.value('text()[1]', 'nvarchar(max)') as Value
from (
     -- Your query starts here
     select T1.T1ID,
            T1.T1Col,
            T2.T2ID,
            T2.T2Col
     from T1
       inner join T2
         on T1.T1ID = T2.T1ID
     -- Your query ends here
     for xml auto, elements, type     
     ) as X1(X)
  cross apply X1.X.nodes('//*[text()]') as X2(N)

SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OPENROWSET tidak menerima variabel untuk argumennya (SQL Server)

  2. Memanggil fungsi yang Ditentukan SQL di C #

  3. Masukkan gambar ke dalam database

  4. 6 Cara Mengonversi String ke Nilai Tanggal/Waktu di SQL Server

  5. Menggunakan DBCC CLOENDATABASE untuk menghasilkan skema dan statistik hanya salinan database pengguna di SQL Server 2014 SP2