1

更新する必要がある SQL テーブルに XML 列があります。構造が次のようになっているとします。

<JPS>
 <P>
  <JP>
   <IsRequired>true</IsRequired>
   <Name>Folder</Name>
   <Value>C:\Test</Value>
  </JP>
  <JP>
   <IsRequired>false</IsRequired>
   <Name>Email Addresses</Name>
   <Value>a@a.com; b@b.com</Value>      
  </JP>
</P>

テーブル内のすべての行のすべての XML 値の電子メール アドレスを特定の値に更新したいと考えています。どうすれば同じことを達成できますか?

4

2 に答える 2

1

値を持つタグの<Value>要素のコンテンツを更新する場合は、次のようなものを使用できます。<JP><Name>Email Addresses</Name>

;WITH XmlEmail AS
(
SELECT 
    SomeUniqueID,  // some unique/primary key ID from your table - adapt as needed!
    JPReq = XJP.value('(IsRequired)[1]', 'varchar(20)'),
    JPName = XJP.value('(Name)[1]', 'varchar(20)'),
    JPValue = XJP.value('(Value)[1]', 'varchar(20)')
FROM 
    dbo.YourTable
CROSS APPLY
    YourXmlColumn.nodes('/JPS/P/JP[Name="Email Addresses"]') AS XTbl(XJP)
)
UPDATE dbo.YourTable
SET YourXmlColumn.modify('replace value of (/JPS/P/JP[Name="Email Addresses"]/Value/text())[1] with "newmail@test.tst"')
FROM XmlEmail xe 
WHERE dbo.YourTable.SomeUniqueID = xe.SomeUniqueID

これにより、すべての行とすべての ノードが同じ値に更新<JP>/<Value>されます - それはあなたが探しているものですか?

更新:<JP> XML 列に実際にタグがEmail Addresses名前として含まれている行のみをチェックおよび更新するためのサポートが追加されました。テーブルに主キーが必要です(何も言わなかったので、それが何であるかはわかりません)。それについて)....私はSomeUniqueID列名として使用しました-必要に応じてテーブルに合わせてください!

于 2013-07-23T10:44:46.697 に答える