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

Bagaimana cara memutar atribut kolom XML di T-SQL?

Lihat poros dinamis ini dan baru-baru ini yang ini - Anda pada dasarnya harus dapat SELECT DISTINCT FieldName untuk menggunakan teknik ini untuk membuat kueri Anda secara dinamis.

Inilah jawaban lengkap untuk masalah khusus Anda (perhatikan bahwa ada kelemahan urutan kolom saat membuat daftar dari atribut yang berbeda dalam mengetahui urutan kolom yang akan muncul):

DECLARE @template AS varchar(MAX)
SET @template = 'SELECT 
    FormEntryId
    ,{@col_list}
    ,DateCreated 
FROM FormEntry'

DECLARE @col_template AS varchar(MAX)
SET @col_template = 'FormXML.value(''/Root[1]/Form[1]/FormData[@FieldName="{FieldName}"][1]/@FieldValue'',''varchar(max)'') AS {FieldName}'

DECLARE @col_list AS varchar(MAX)

;WITH FieldNames AS (
    SELECT DISTINCT FieldName
    FROM FormEntry
    CROSS APPLY (
        SELECT X.FieldName.value('@FieldName', 'varchar(255)')
        FROM FormXML.nodes('/Root[1]/Form[1]/FormData') AS X(FieldName)
    ) AS Y (FieldName)
)
SELECT @col_list = COALESCE(@col_list + ',', '') + REPLACE(@col_template, '{FieldName}', FieldName)
FROM FieldNames

DECLARE @sql AS varchar(MAX)
SET @sql = REPLACE(@template, '{@col_list}', @col_list)

EXEC (@sql)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Internal:Operator Bermasalah Pt. Saya – Memindai

  2. Masukkan ke dalam tabel dengan pernyataan pilih ditambah kolom tambahan di SQL Server 2008

  3. Cara Membuat Pernyataan Kolom Tambah untuk semua tabel dalam Database di SQL Server - Tutorial SQL Server / T-SQL Part 49

  4. Bagaimana cara mendapatkan Insert id di MSSQL di PHP?

  5. Mendapatkan peringatan:Nilai nol dihilangkan dengan operasi SET agregat atau lainnya