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('');