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

Анализирайте XML с многостепенно влагане в SQL

Ако приемем, че имате своя XML в променлива на SQL Server, наречена @XML , можете да използвате родния XQuery поддръжка в SQL Server 2005 и по-нови, за да направите това много по-елегантно и ефективно:

DECLARE @XML XML = '...(your XML here).....' 

SELECT
    RootID = @xml.value('(/Root/@ID)[1]', 'int'),
    ConditionSetOperator = XC.value('@Operator', 'varchar(50)'),
    ConditionID =  XC2.value('@ID', 'int'),
    ConditionOperator = XC2.value('@Operator', 'varchar(50)')
FROM 
    @Xml.nodes('//ConditionSet') AS XT(XC)
CROSS APPLY
    xc.nodes('Condition') AS XT2(XC2)

Това ми дава резултат от

С XQuery оператори като .nodes() или .value() , можете лесно да „накъсате“ XML документ в релационни данни и да ги съхраните, ако е необходимо.

Първото извикване на @xml.nodes('//ConditionSet') ще получи "псевдо" таблица за всеки съвпадащ възел - така че всеки <ConditionSet> възел ще бъде върнат в "псевдо" таблицата XT като колона XC и след това мога лесно да взема атрибути (или XML елементи) от този XML фрагмент, използвайки XQuery методи като .value() .

Или дори мога да взема списъка с подвъзли <Condition> за всеки от тези <ConditionSet> възли - с помощта на CROSS APPLY с второ извикване на .nodes()




  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 заявка за броене на записи на месец

  2. Каква е алтернативата на курсорите за sql цикъл?

  3. показване на неагрегирана колона в група по заявка в SQL

  4. Как да сумирам сметки по дължина на кода на сметката?

  5. Обвиване на текст в SQL сървър с помощта на функция