1
下面是一個例證我希望修改的生產數據的XML模式,我只是試圖找到ANY值「Billy」並將其替換爲「Peter」 。通配符的原因是我們必須用很多值和很多帶有XML列的表來做到這一點,一旦我得到這個工作,我可以輕鬆地將它包裝在一個遊標中。通配符查找和替換XML:無法指定替換值
DECLARE @tbXML TABLE (ID INT , ParameterValue XML)
declare @oldval nvarchar(max) = 'Billy'
declare @newval nvarchar(max) = 'Peter'
INSERT INTO @tbXML VALUES (1, '<USER>Billy</USER>')
INSERT INTO @tbXML VALUES (2, '<USER>John</USER>')
INSERT INTO @tbXML VALUES (3, '<USER>David</USER>')
INSERT INTO @tbXML VALUES (4, '<USER>Nick</USER>')
SELECT 'before', *
FROM @tbXML
WHILE EXISTS (SELECT 1 FROM @tbXML WHERE ParameterValue.exist('/User[(text()[1])eq sql:variable("@oldval")]')=1)
BEGIN
UPDATE @tbXML
SET ParameterValue.modify('replace value of (/User[(text()[1]) eq sql:variable("@oldval")] with sql:variable("@newval")')
WHERE ParameterValue.exist('/User[(text()[1])eq sql:variable("@oldval")]')=1
END
SELECT *
FROM @tbXML
但我得到的是:
XQuery [@tbXML.ParameterValue.modify()]: ")" was expected.
要麼我愣神缺少")"
地方(試了很多排列,相同的錯誤),或有更多的東西錯了我的做法。希望在正確的方向微調,謝謝!
謝謝你做的伎倆! – tpcolson 2014-10-02 22:03:57