1

My code with xml file looks like :

DECLARE @t TABLE (rowId INT IDENTITY PRIMARY KEY, yourXML XML)

INSERT INTO @t (yourXML)
    SELECT '<ns2:zarejestrujStanZgodyAsync xmlns:ns2="http://cyfrowypolsat.pl/interfejsy/zgody/v4/zgodyKlienckie" xmlns:ns10="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Dokumenty/v2/Nota" xmlns:ns11="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Dokumenty/v2/FakturaDoZamowienia" xmlns:ns12="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Core/v2/Konto" xmlns:ns13="http://cyfrowypolsat.pl/uslugi/windykacja/v2/Konto" xmlns:ns14="http://cyfrowypolsat.pl/uslugi/rozliczenia/v2/Konto" xmlns:ns3="http://cyfrowypolsat.pl/interfejsy/crossPromocje/v2/PowiadomieniaZwrotne" xmlns:ns4="http://cyfrowypolsat.pl/uslugi/polecenieZaplaty/v1/Konto" xmlns:ns5="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Core/v2/KontraktRatalny" xmlns:ns6="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Core/v3/Kontrakt" xmlns:ns7="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Core/v2/FakturaCykliczna" xmlns:ns8="http://cyfrowypolsat.pl/interfejsy/bdth/rozliczenie/v3/FakturySprzedazowe" xmlns:ns9="http://cyfrowypolsat.pl/interfejsy/Rozliczenia/Core/v3/KontraktRatalny">
  <metryka>
    <uzytkownik>om-system</uzytkownik>
    <system>OM</system>
    <data>2018-12-17T19:09:52.534</data>
    <uid>962B7A95-5663-4694-9226-B4216270D404</uid>
    <nazwaKwalifikowanaInterfejsuWywolywanego>{http://cyfrowypolsat.pl/interfejsy/zgody/v4/zgodyKlienckie}zarejestrujStanZgodyAsync</nazwaKwalifikowanaInterfejsuWywolywanego>
  </metryka>
  <rejestrujStanZgody>
    <idPoziomy>4</idPoziomy>
    <idReferencji>112070742</idReferencji>
    <idPaczki>962B7A95-5663-4694-9226-B4216270D404</idPaczki>
    <idStanyWoliKlienta>2</idStanyWoliKlienta>
    <idTypyZgod>1027</idTypyZgod>
    <dataWaznosciOd>2018-12-17T11:01:55.833</dataWaznosciOd>
    <idSystemy>13</idSystemy>
    <idPrzyczynyZmianyWpisu>4</idPrzyczynyZmianyWpisu>
    <idTypyUmow>1516</idTypyUmow>
    <operatorModyfikujacy>POLSATC\processEngine</operatorModyfikujacy>
    <idProcesuSprzedazowego>RETENTION</idProcesuSprzedazowego>
  </rejestrujStanZgody>
  <rejestrujStanZgody>
    <idPoziomy>4</idPoziomy>
    <idReferencji>112070742</idReferencji>
    <idPaczki>962B7A95-5663-4694-9226-B4216270D404</idPaczki>
    <idStanyWoliKlienta>1</idStanyWoliKlienta>
    <idTypyZgod>1028</idTypyZgod>
    <dataWaznosciOd>2018-12-17T11:01:55.843</dataWaznosciOd>
    <idSystemy>13</idSystemy>
    <idPrzyczynyZmianyWpisu>4</idPrzyczynyZmianyWpisu>
    <idTypyUmow>1516</idTypyUmow>
    <operatorModyfikujacy>POLSATC\processEngine</operatorModyfikujacy>
    <idProcesuSprzedazowego>RETENTION</idProcesuSprzedazowego>
  </rejestrujStanZgody>
  <rejestrujStanZgody>
    <idPoziomy>4</idPoziomy>
    <idReferencji>112070742</idReferencji>
    <idPaczki>962B7A95-5663-4694-9226-B4216270D404</idPaczki>
    <idStanyWoliKlienta>2</idStanyWoliKlienta>
    <idTypyZgod>1110</idTypyZgod>
    <dataWaznosciOd>2018-12-17T11:01:55.873</dataWaznosciOd>
    <idSystemy>13</idSystemy>
    <idPrzyczynyZmianyWpisu>4</idPrzyczynyZmianyWpisu>
    <idTypyUmow>1516</idTypyUmow>
    <operatorModyfikujacy>POLSATC\processEngine</operatorModyfikujacy>
    <idProcesuSprzedazowego>RETENTION</idProcesuSprzedazowego>
  </rejestrujStanZgody>
  <rejestrujStanZgody>
    <idPoziomy>4</idPoziomy>
    <idReferencji>112070742</idReferencji>
    <idPaczki>962B7A95-5663-4694-9226-B4216270D404</idPaczki>
    <idStanyWoliKlienta>2</idStanyWoliKlienta>
    <idTypyZgod>1092</idTypyZgod>
    <dataWaznosciOd>2018-12-17T11:01:55.863</dataWaznosciOd>
    <idSystemy>13</idSystemy>
    <idPrzyczynyZmianyWpisu>4</idPrzyczynyZmianyWpisu>
    <idTypyUmow>1516</idTypyUmow>
    <operatorModyfikujacy>POLSATC\processEngine</operatorModyfikujacy>
    <idProcesuSprzedazowego>RETENTION</idProcesuSprzedazowego>
  </rejestrujStanZgody>
  <rejestrujStanZgody>
    <idPoziomy>4</idPoziomy>
    <idReferencji>112070742</idReferencji>
    <idPaczki>962B7A95-5663-4694-9226-B4216270D404</idPaczki>
    <idStanyWoliKlienta>1</idStanyWoliKlienta>
    <idTypyZgod>1065</idTypyZgod>
    <dataWaznosciOd>2018-12-17T11:01:55.857</dataWaznosciOd>
    <idSystemy>13</idSystemy>
    <idPrzyczynyZmianyWpisu>4</idPrzyczynyZmianyWpisu>
    <idTypyUmow>1516</idTypyUmow>
    <operatorModyfikujacy>POLSATC\processEngine</operatorModyfikujacy>
    <idProcesuSprzedazowego>RETENTION</idProcesuSprzedazowego>
  </rejestrujStanZgody>
</ns2:zarejestrujStanZgodyAsync>'



SELECT 'before' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

-- Update one attribute
UPDATE @t
SET yourXML.modify('replace value of (zarejestrujStanZgodyAsync/rejestrujStanZgody/idSystemy/text())[1] with "38"')
WHERE rowId = 1

SELECT 'after' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

I don't know what I am doing wrong here...

I want to change this line

<idSystemy>13</idSystemy>

to :

<idSystemy>38</idSystemy>

I know this code is going to change only the first variable of my xml. How should I do it correctly + what can I do to change this in my whole xml file?

When I use my code, I never got the expected value.

Thanks in advance for any tips.

adam
  • 179
  • 2
  • 12
  • Are you wanting to replace all occurrences of `13`? Looking at your XML there are 5 instances of it, however, your sample SQL implies you only want to replace the first. – Thom A Dec 19 '18 at 09:45
  • i want to replace all of them , but my code should replace 1st one. If you know how can i replace all of them please edit little my code and ansewar question :) – adam Dec 19 '18 at 09:46
  • https://stackoverflow.com/questions/16712841/xml-sql-update-multiple-nodes/16713657#16713657 – Mikael Eriksson Dec 19 '18 at 11:02
  • Check the answer here. I have replaced and removed colon (:) from main node name- https://stackoverflow.com/questions/7596422/sql-server-xml-replace-values-in-attribute/53850073#53850073 – Suraj Kumar Dec 19 '18 at 11:15
  • You edited my xml file.... @SurajKumar i want answear for my question without removing something with my xml file – adam Dec 19 '18 at 11:23
  • Yes it is because the identifier can not contain special character like : – Suraj Kumar Dec 19 '18 at 11:26
  • so give some circumvention to change the expected value and get the final xml the same – adam Dec 19 '18 at 11:30
  • @MikaelEriksson if its duplicate please give short and fast ansewar question. No it isn't i want to replace xml with namespace as you see it's not simple. – adam Dec 19 '18 at 11:31
  • I know what is wrong here and can ansewar my own question , but need to unlock from duplicate please. – adam Dec 19 '18 at 11:40
  • @adam From your comment "i want to replace all of them" I thought you had issues with replacing more than one value. I guess the issue you have is with namespaces. There are other questions on this site that describes how you should deal with namespaces so this question might be closed as a duplicate again but I have voted to reopen. – Mikael Eriksson Dec 19 '18 at 12:28

1 Answers1

1

To update this number i used just this code:

UPDATE @t
SET yourXML.modify('replace value of (//*/rejestrujStanZgody/idSystemy/text())[1] with ("38")')
WHERE rowId = 1

and it works perfect (with namespaces we need to build path like this //* to avoid ns2:zarejestrujStanZgodyAsync

adam
  • 179
  • 2
  • 12