Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak przestawić na atrybuty kolumny XML w T-SQL?

Przyjrzyj się tym dynamicznym przestawieniu a ostatnio ten - w zasadzie musisz umieć SELECT DISTINCT FieldName aby użyć tej techniki do dynamicznego tworzenia zapytań.

Oto pełna odpowiedź na Twój konkretny problem (zwróć uwagę, że podczas generowania listy na podstawie różnych atrybutów występuje słabość kolejności kolumn):

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. Utwórz niestandardowy komunikat o błędzie w ograniczeniach sprawdzania w SQL SERVER 2008

  2. Jak przechwycić dane wyjściowe instrukcji DBCC w pokusie?

  3. Jak uzyskać listę wszystkich tabel w bazie danych za pomocą TSQL?

  4. Pierwsze kroki z GearHost do tworzenia baz danych SQL Server

  5. 3 obszary, które skorzystają na wykorzystaniu narzędzia do monitorowania wydajności serwera SQL