我遇到問題了!我們有一個具有XML類型列的SQL Server表。此列有許多節點,其中一些節點拼寫錯誤。
我想寫一個腳本,更新所有這種拼寫錯誤!問題是我不知道該怎麼做!
假設XML列中的一個節點名是TEST
,其中一些節點的拼寫錯誤值爲MISSPELLED
,我希望在更新後將其修改爲CORRECT
。
這是可能做到的,如果是的話如何?
在此先感謝。
/卡翁達更新XML類型列的值
0
A
回答
0
您可以通過以下方式修改XML列中的數據:
CREATE TABLE Test (C1 XML)
INSERT INTO Test
VALUES ('<REF>
<Person>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<System>
<User><Systemid>System1</Systemid><Type>UserId</Type><Useridentity>Userid1</Useridentity></User>
<User><Systemid>System2</Systemid><Type>UserIdx</Type><Useridentity>Userid2</Useridentity></User>
<User><Systemid>System2</Systemid><Type>Department</Type><Useridentity>Finance</Useridentity></User>
<User><Systemid>System3</Systemid><Type>UserId</Type><Useridentity>Userid3</Useridentity></User>
<User><Systemid>System4</Systemid><Type>UserIdx</Type><Useridentity>Userid4</Useridentity></User>
</System>
</Person>
</REF>
')
UPDATE [Test]
SET C1.modify('replace value of (/REF/Person/System/User/Type/text())[1] with "UserId"')
WHERE C1.value('(/REF/Person/System/User/Type/text())[1]', 'varchar(max)') LIKE '%UserIdx%'
UPDATE:
對於更新列,你需要編寫腳本像下面多個值:
DECLARE @strSQL NVARCHAR(MAX)
DECLARE @Index INT
DECLARE @NodeCount INT
SET @Index = 1
SELECT @NodeCount = C1.value('count(/REF/Person/System/User/Type)', 'INT') from Test
WHILE @Index <= @NodeCount
BEGIN
SET @strSQL = ' UPDATE [Test]
SET C1.modify(''replace value of (/REF/Person/System/User/Type/text())[' + CAST(@Index AS VARCHAR(10)) + '] with "UserId"'')
WHERE C1.value(''(/REF/Person/System/User/Type/text())[' + CAST(@Index AS VARCHAR(10)) + ']'', ''varchar(max)'') LIKE ''%UserIdx%'''
EXEC(@strSQL)
SET @Index = @Index + 1
END
0
<REF><Person><FirstName>John</FirstName><LastName>Smith</LastName><System><User><Systemid>System1</Systemid><Type>UserId</Type><Useridentity>Userid1</Useridentity></User><User><Systemid>System2</Systemid><Type>UserIdx</Type><Useridentity>Userid2</Useridentity></User><User><Systemid>System2</Systemid><Type>Department</Type><Useridentity>Finance</Useridentity></User><User><Systemid>System3</Systemid><Type>UserId</Type><Useridentity>Userid3</Useridentity></User><User><Systemid>System4</Systemid><Type>UserIdx</Type><Useridentity>Userid4</Useridentity></User></System></Person></REF>
相關問題
- 1. 更新塊類型佈局XML更新
- 2. XML值更新
- 3. 如何更新PostgreSQL中XML數據類型列
- 4. 更新json類型的列值失敗,出現異常
- 5. 無法更新數據類型字節的列值[]休眠
- 6. 更新表中的xml列
- 7. XSD爲XML與不同的列表並重新排列類型
- 8. 休眠+ H2不更新yes_no類型列
- 9. Json類型列元素更新 - Postgres
- 10. 如何更新日期類型列?
- 11. Highcharts更新系列類型dataloss
- 12. PostgreSQL:從布爾值更改列類型
- 13. 更改列值數據類型(日期)
- 14. 更新列值
- 15. 更新列值
- 16. 更新值列
- 17. 更新列值
- 18. 更新模型值
- 19. 更新模型值
- 20. XML不斷更新值
- 21. 更新XML節點值
- 22. MySQL更新XML節點值
- 23. Mongodb更新查詢保留價值和更新數據類型
- 24. Android的XML內容類型的錯誤更新
- 25. XML不是由列類型XML返回
- 26. SQL Server - xml類型列 - XML DML
- 27. 更新模型更新不及時更改的數據類型
- 28. 從陣列xml更新mysql
- 29. 可更新數據列的更新值
- 30. 如何返回具有更新值的新類型
謝謝Upendra爲您的答覆。一個問題:[1]在你的解決方案中的含義是什麼(在ET C1.modify('(/ Sample/NodeTwo/text())[1]用sql:variable(「@ newValue」)替換值) )? – user3292601
還有一件事:就我而言,每行的XML列中可能有多個拼寫錯誤。 – user3292601
@ user3292601:[1]是該節點的記錄索引。如果有多個具有相同節點的記錄,則使用該索引來獲取數據。如果這是你的情況,那麼請提供你現有的XML,所以我可以指導你 –