簡體   English   中英

SQL server 2008 r2 中的 XML 查詢/修改問題

[英]XML query/modify problem in SQL server 2008 r2

我對 SQL 相當陌生,我正在嘗試過濾和更改包含已購買訂單的 XML 文檔的列內的值。 這是 XML 文檔的外觀和我正在搜索的示例。

 <TenderLines>
   <TenderLineItem>
     <tenderTypeId>S0001-00000001</tenderTypeId>
     ..
     ..
    </TenderLineItem>
  <TenderLines>

我有 6000 多行,但並非所有行都具有相同的tenderTypeId。 我想過濾掉tenderTypeId中具有'S0001-00000001'的值並將它們更改為'2'

到目前為止,這就是我想出的。

USE LSPOS80
DECLARE @replacement as varchar(50)
DECLARE @redundant as varchar(50)
SET @replacement = '2'
SET @redundant = 'S0001-00000001'

Update dbo.POSISTRANSACTIONTABLE
SET TRANSACTIONXML.modify
('replace value of(/RetailTransaction/TenderLines/TenderLineItem/tenderTypeId/@redundant) [1] with sql:variable("@replacement")')

查詢已成功執行,但沒有任何變化,我想知道你們中的任何人是否可以閱讀此內容並可能給我提示。

感謝您抽出寶貴時間,向您致以最誠摯的問候,瓦爾迪。

PS 我正在使用 Microsoft SQL Server 2008 R2 - Express Edition

update dbo.POSISTRANSACTIONTABLE set
  TRANSACTIONXML.modify('replace value of (/TenderLines/TenderLineItem/tenderTypeId/text())[1] with (sql:variable("@replacement"))')
where XMLCol.exist('/TenderLines/TenderLineItem/tenderTypeId[. = sql:variable("@redundant")]') = 1

要測試的東西:

declare @T table(XMLCol xml)
insert into @T values 
('<TenderLines>
   <TenderLineItem>
     <tenderTypeId>S0001-00000001</tenderTypeId>
    </TenderLineItem>
 </TenderLines>'),
('<TenderLines>
   <TenderLineItem>
     <tenderTypeId>S0003-00000003</tenderTypeId>
    </TenderLineItem>
 </TenderLines>')

DECLARE @replacement as varchar(50)
DECLARE @redundant as varchar(50)
SET @replacement = '2'
SET @redundant = 'S0001-00000001'

update @T set
  XMLCol.modify('replace value of (/TenderLines/TenderLineItem/tenderTypeId/text())[1] with (sql:variable("@replacement"))')
where XMLCol.exist('/TenderLines/TenderLineItem/tenderTypeId[. = sql:variable("@redundant")]') = 1

select *
from @T

請注意,這只會替換 XML 中每一行的一個tenderTypeId 值。 如果您在 xml(在一行中)中有多個tenderTypeId,並且您想要替換它們,您需要將更新語句放在一個while循環中並替換只要where XMLCol.exist('/TenderLines/TenderLineItem/tenderTypeId[. = sql:variable("@redundant")]') = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM