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

Bagaimana FOR XML PATH('') bekerja saat menggabungkan baris

Apa FOR XML PATH('xxx') lakukan adalah membuat string XML untuk hasil yang menempatkan setiap baris dalam <xxx></xxx> elemen dan setiap nilai kolom di dalam baris, dalam elemen dengan nama kolom itu.

Jika PATH kosong (yaitu PATH('') ) menghilangkan elemen baris dalam pembuatan XML. Jika kolom tidak memiliki nama, elemen kolom di generasi XML akan dihilangkan. Ketika kedua PATH kosong dan kolom tidak memiliki nama, PATH secara efektif menjadi rangkaian string dari semua baris.

Jalankan pernyataan berikut untuk mendapatkan pemahaman yang lebih baik dalam prosesnya:

-- Each row is in a <beta></beta> element
-- Each column in that row in a <alfa></alfa> element (the column name)
SELECT
    alfa=','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('beta');

-- Since the PATH is empty, the rows are not put inside an element
-- Each column in that row is in a <alfa></alfa> element (the column name)
SELECT
    alfa=','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

-- Since the PATH is empty, the rows are not put inside an element
-- Since the column has no name it is not put inside an element     
SELECT
    ','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

-- This uses the STUFF function to remove the leading comma to get a proper comma-seperated list    
SELECT STUFF((
    SELECT
        ','+TABLE_SCHEMA + '.' + TABLE_NAME
    FROM
        INFORMATION_SCHEMA.TABLES
    FOR
        XML PATH('')
    ),1,1,''
) AS comma_seperated_list;

Sekarang saya mendengar Anda bertanya:Bagaimana saya bisa menghapus nama kolom ketika saya cukup memilih kolom dari tabel. Ada beberapa cara, sesuai dengan preferensi saya:

  • Properti XQuery:SELECT [text()]=column_name ...
  • Gunakan subkueri untuk memilih nilai kolom:SELECT (SELECT column_name) ...
  • CAST kolom ke jenisnya:SELECT CAST(column_value AS <TYPE of the column>) ...

Contoh:

SELECT
    [text()]=TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

SELECT
    (SELECT TABLE_NAME)
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');

SELECT
    CAST(TABLE_NAME AS SYSNAME)
FROM
    INFORMATION_SCHEMA.TABLES
FOR
    XML PATH('');



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi Nomor Bulan ke Nama Bulan di SQL Server (T-SQL)

  2. Menghapus Profil Email Database di SQL Server (T-SQL)

  3. Cara paling sederhana untuk melakukan self-join rekursif?

  4. Cara Memformat Angka dengan Koma di SQL Server

  5. Cara Membuat Daftar Fitur Usang dalam Instance SQL Server menggunakan T-SQL