更新 SQL Server 中的 XML 文件(带有命名空间)
我的xml文件代码如下:
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>POLSATCprocessEngine</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>POLSATCprocessEngine</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>POLSATCprocessEngine</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>POLSATCprocessEngine</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>POLSATCprocessEngine</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...
我想换行
<idSystemy>13</idSystemy>
到:
<idSystemy>38</idSystemy>
我知道这段代码只会改变我的 xml 的第一个变量.我应该如何正确地做 + 我该怎么做才能在我的整个 xml 文件中更改它?
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.
推荐答案
为了更新这个数字,我只使用了这个代码:
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
而且效果很好(使用命名空间,我们需要构建这样的路径 //*
以避免 ns2:zarejestrujStanZgodyAsync
and it works perfect (with namespaces we need to build path like this //*
to avoid ns2:zarejestrujStanZgodyAsync
相关文章