XML verilerden faklı olanları listeleme

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

XML verilerden faklı olanları listeleme

Mesaj gönderen softdestek »

@old xml = '<row GUEST_ID="13" GUEST_NAME="VEDAT" GUEST_SURNAME="PALA" ADRESS="IZMIR />'
@new xml = '<row GUEST_ID="13" GUEST_NAME="VEDAT35" GUEST_SURNAME="PALA" ADRESS="IZMIR" CITY="DR" CITY_CODE="35" />'

aşağıdaki kola old ve new değerlerini karşılaştırıp

<row CITY="DR" CITY_CODE="35" /> değerini buluyorum farklı olan..

Fakat olması gereken şey old xml içinde yer alan VEDAT değeri VEDAT35 olduğu halde bunu listeyelemiyorum.Kodda nasıl bir değişiklik yaparsam bu değeride listeleyebilirim..
Aslında olması gereken doğru sonuç XML olarak şu olması gerekiyor
<row GUEST_NAME="VEDAT35" CITY="DR" CITY_CODE="35" />

Kod: Tümünü seç

DECLARE @old xml = '<row GUEST_ID="13" GUEST_NAME="VEDAT" GUEST_SURNAME="PALA" ADRESS="IZMIR" />', 
        @new xml = '<row GUEST_ID="13" GUEST_NAME="VEDAT35" GUEST_SURNAME="PALA" ADRESS="IZMIR" CITY="DR" CITY_CODE="35" />' 
		
DECLARE @attr    sysname 

DECLARE cur CURSOR STATIC LOCAL FOR 
   SELECT  attr 
   FROM   (SELECT T.c.value('local-name(.)', 'nvarchar(128)') AS attr, 
                  T.c.value('.', 'nvarchar(4000)') AS oldvalue, 
                  NULL AS newvalue 
           FROM   @old.nodes('/row/@*') AS T(c) 
           UNION  ALL 
		 
           SELECT T.c.value('local-name(.)', 'nvarchar(128)') AS attr, 
                  NULL, 
                  T.c.value('.', 'nvarchar(4000)') AS newvalue 
           FROM   @new.nodes('/row/@*') AS T(c)) AS u 
   GROUP  BY attr 
 HAVING MIN(oldvalue) = MIN(oldvalue) 

OPEN cur 

WHILE 1 = 1 
BEGIN 
   FETCH cur INTO @attr 
   IF @@fetch_status <> 0 
      BREAK 
      
    SET @new.modify('delete /row/@*[local-name(.)=sql:variable("@attr")]')   
END 

DEALLOCATE cur 

SELECT @new
bu kodun çıktısı

<row CITY="DR" CITY_CODE="35" />
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: XML verilerden faklı olanları listeleme

Mesaj gönderen mkysoft »

http://delphiturkiye.com/forum/viewtopi ... 35#p186077 buradaki gibi replace ile insert komutuna çevirip temp tablolara aldıktan sonra istediğini elde edebilirsin.
Cevapla