sql >> Databáze >  >> RDS >> Sqlserver

Jak FOR XML PATH('') funguje při zřetězení řádků

Co FOR XML PATH('xxx') vytvoří řetězec XML pro sadu výsledků, který vloží každý řádek do <xxx></xxx> prvek a každou hodnotu sloupce uvnitř řádku v prvku s názvem daného sloupce.

Pokud je PATH prázdná (tj. PATH('') ) vynechá prvek řádku při generování XML. Pokud sloupec nemá žádný název, vynechá prvek sloupce při generování XML. Když jsou obě PATH prázdné a sloupce nemají žádné názvy, stane se zřetězením řetězců všech řádků.

Spusťte následující příkazy, abyste získali lepší přehled o procesu:

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

Teď slyším, jak se ptáte:Jak mohu odstranit název sloupce, když jednoduše vyberu sloupec z tabulky. Existuje několik způsobů, v pořadí podle mých preferencí:

  • Vlastnosti XQuery:SELECT [text()]=column_name ...
  • Pro výběr hodnoty sloupce použijte dílčí dotaz:SELECT (SELECT column_name) ...
  • ODESLÁNÍ sloupce na jeho typ:SELECT CAST(column_value AS <TYPE of the column>) ...

Příklady:

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. Připojujete se k MS SQL Server s ověřováním Windows pomocí Pythonu?

  2. Vyberte bez klauzule FROM v Oracle

  3. SQL Server 2008 - řazení podle řetězců s číselným číslem

  4. Upozornění PHP:mysqli_connect():(HY000/2002):Připojení odmítnuto