sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan opdaterer du en tabel baseret på en XML-parameter

Ved at bruge en rekursiv cte kan jeg få det resultat, du leder efter. Som det følgende viser. Men det er i hvert fald ikke en cursor/while-loop;)

erklær @tmpConstraint-tabel (ID int , Constraint_Value varchar(256))indsæt i @tmpConstraint-værdier (1, '(OldVal_1) (OldVal_2)'),(2, '(OldVal_2) (OldVal_1)') erklær @myXML XMLset @myXML =N' OldVal_1NewVal_1 OldVal_2NewVal_2 'declare @xmlData table (oldValue varchar(256), newValue varchar(256))insert into @xmlData select oldValue =Child.value('(old)[1]', 'varchar(50)'), newValue =Child.value('(ny)[1]', 'varchar(50)')fra @myXML.nodes('/qaUpdates/qaUpdate') som N(Child)  

Ovenstående var kun opsat til følgende.

;med cte (ID, Constraint_Value, CLevel)as( vælg c.ID, c.Constraint_Value, 1 fra @tmpConstraint c union alle vælg p.ID, cast(replace(p.Constraint_Value, x.oldValue) , x.newValue) som varchar(256)), p.CLevel + 1 fra cte p join @xmlData x på p.Constraint_Value som '%' + x.oldValue + '%')update cset c.Constraint_Value =t.Constraint_Valuefrom @tmpConstraint cjoin (vælg *, rn =row_number() over (partition efter ID-rækkefølge efter CLevel desc) fra cte) t på t.ID =c.ID og rn =1vælg * fra @tmpConstraint

  1. Postgres Alter Column Heltal til Boolean

  2. SQLException:ORA-06550 ved opkald af PL/SQL-funktion fra Java

  3. Hvordan kan jeg flette to MySQL-tabeller?

  4. Hvordan opretter man en SQL Server-funktion for at forbinde flere rækker fra en underforespørgsel til et enkelt afgrænset felt?