sql >> データベース >  >> RDS >> Sqlserver

XML パラメータに基づいてテーブルを更新する方法

    再帰的な cte を使用すると、探している結果を得ることができます。以下に示すように。しかし、少なくともカーソル/while-loop ではありません;)

    declare @tmpConstraint table (ID int , Constraint_Value varchar(256))insert into @tmpConstraint values (1, '(OldVal_1) (OldVal_2)'),(2, '(OldVal_2) (OldVal_1)')宣言 @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('(new)[1]', 'varchar(50)')from @myXML.nodes('/qaUpdates/qaUpdate') as N(Child)   

    上記は以下の設定に過ぎません。

    ; with cte (ID, Constraint_Value, CLevel)as( select c.ID, c.Constraint_Value, 1 from @tmpConstraint c union all select p.ID, cast(replace(p.Constraint_Value, x.oldValue , x.newValue) as varchar(256)), p.CLevel + 1 from cte p join @xmlData x on p.Constraint_Value like '%' + x.oldValue + '%')update cset c.Constraint_Value =t.Constraint_Valuefrom @tmpConstraint cjoin ( select *, rn =row_number() over (CLevel desc による ID 順のパーティション) from cte) t on t.ID =c.ID and rn =1select * from @tmpConstraint  

    1. クエリを使用してワードプレスの投稿からリンクを削除する

    2. PDOException:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfoが失敗しました:名前またはサービスが不明です

    3. 別のテーブルにレコードがないテーブルからレコードをフェッチする

    4. UPDATEデータベースクエリを使用したSQL構文エラー