[英]Update value of xml attribute contained in a SQL table column
sqlcmd -S .\SQLEXPESS
USE Directory
SELECT Info FROM dbo.User WHERE Name = TestACC
SET [User Status].modify('replace value of
(/User/[User Status]/text())[1] with ("Activated")')
GO
我有一個數據庫Directory
。
表dbo.User
該表中有多列,但與IM有關的兩個是Name
和Info
。
Name
包含帳戶用戶名, Info
包含約100行xml標記,用於表示該用戶的帳戶首選項和設置。 其中一行是<User Status> Deactivated </User Status>
,也可以將其設置為<User Status> Activated </User Status>
具體取決於之后是否忘記了停用該帳戶。
我必須每天通過加載GUI,登錄並通過其屬性更改狀態,大概每天更改30次此帳戶狀態。 由於GUI加載速度太慢,每次狀態更改大約需要6分鍾,並且旋轉時需要輸入3個密碼才能登錄GUI,因此這是一個猜謎游戲。 GUI不會很快改變,因此我只想刪除一個腳本以將用戶狀態設置為停用或激活。
我這樣做對嗎?
我認為,在這里有用的是使用XML參數創建存儲過程。
您應該使用輸入參數標記表中的列,並根據發生更改的“用戶”的ID來自動更新“用戶狀態”中的值。
有關更多詳細信息,請查看此鏈接TSQL:如何在存儲過程中使用XML參數
您的問題是:您正在處理看起來像XML的東西,但這不是有效的XML。 在此處檢查命名規則 。
不允許這樣的元素:
<User Status> Deactivated </User Status>
您可以將其更改為
<User Status="Deactivated"/>
或者
<User_Status> Deactivated </User_Status>
您的代碼實際上是完全錯誤的:
USE Directory
SELECT Info FROM dbo.User WHERE Name = TestACC
SET [User Status].modify('replace value of
(/User/[User Status]/text())[1] with ("Activated")')
除了無效的XML,您還必須使用一些其他內容
UPDATE dbo.User SET Info.modify('replace value of (someXpathHere)[1] with "SomeValue"');
開發人員做這種愚蠢的事情真的很煩人。 現在,您必須處理這種混亂。 有時我們不得不忍受...
由於您的“ XML”實際上不是有效的XML,因此您有兩種選擇:
REPLACE
字符串方法)並處理XML方法(然后刪除您的更改)或 我建議嘗試一個簡單的
UPDATE dbo.User
SET Info=REPLACE(Info
,'<User Status> Deactivated </User Status>'
,'<User Status> Activated </User Status>');
這種方法取決於確切的書寫方式,其他使用空格等方式可能會破壞此效果...您可能會想到一些RegEx ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.