Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

XML पैरामीटर के आधार पर तालिका को कैसे अपडेट करें

एक पुनरावर्ती सीटीई का उपयोग करने से मुझे वह परिणाम प्राप्त करने की अनुमति मिलती है जिसे आप ढूंढ रहे हैं। जैसा कि निम्नलिखित दिखाता है। लेकिन कम से कम यह कर्सर/लूप नहीं है;)

declare @tmpConstraint table (ID int , Constraint_Value varchar(256))
insert into @tmpConstraint values 
(1, '(OldVal_1) (OldVal_2)'),
(2, '(OldVal_2) (OldVal_1)')

declare @myXML XML
set @myXML = N'<qaUpdates>
    <qaUpdate><old>OldVal_1</old><new>NewVal_1</new></qaUpdate>
    <qaUpdate><old>OldVal_2</old><new>NewVal_2</new></qaUpdate>
</qaUpdates>'

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 c
set c.Constraint_Value = t.Constraint_Value
from @tmpConstraint c
join (
    select 
        *,
        rn = row_number() over (partition by ID order by CLevel desc)
    from cte
) t on t.ID = c.ID and rn = 1

select * from @tmpConstraint


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FIRE_TRIGGERS के साथ BULK इंसर्ट ट्रिगर निष्पादित नहीं करता है

  2. SQL में पासवर्ड हैश करना

  3. SQL सर्वर:क्रॉस जॉइन और फुल आउटर जॉइन में क्या अंतर है?

  4. Mssql में अद्वितीय कुंजी बाधा पर डुप्लिकेट शून्य मान उल्लंघन

  5. पता लगाएँ कि एक राशि में कितने हज़ार और सैकड़ों और दहाई होते हैं