Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как работи FOR XML PATH('') при конкатенация на редове

Какво FOR XML PATH('xxx') прави, е да създаде XML низ за набора от резултати, който поставя всеки ред в <xxx></xxx> елемент и всяка стойност на колона вътре в реда, в елемент с името на тази колона.

Ако PATH е празен (т.е. PATH('') ) пропуска елемента на реда в XML генерирането. Ако колоната няма име, тя пропуска елемента на колоната в XML генерирането. Когато и двата PATH са празни и колоните нямат имена, той ефективно се превръща в конкатенация на низове на всички редове.

Изпълнете следните оператори, за да получите по-добра представа за процеса:

-- 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;

Сега ви чувам да питате:Как мога да премахна името на колоната, когато просто избера колона от таблица. Има няколко начина, по реда на предпочитанията ми:

  • Свойства на XQuery:SELECT [text()]=column_name ...
  • Използвайте подзаявка, за да изберете стойността на колоната:SELECT (SELECT column_name) ...
  • CAST колоната към нейния тип:SELECT CAST(column_value AS <TYPE of the column>) ...

Примери:

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. SQL Server произволно сортиране

  2. Елементите ORDER BY трябва да се появят в списъка за избор, ако е посочено SELECT DISTINCT

  3. Получаване на странна грешка, SQL Server заявка с помощта на клауза `WITH`

  4. Първа публична визуализация на SQL Server 2019:CTP 2.0

  5. Len() срещу datalength() в SQL Server 2005