使用“替换值”来执行部分替换

时间:2016-08-08 20:53:34

标签: sql-server xml tsql

假设我有以下XML:

<Configuration>
    <Formula>{X} * {Y} * {Z}</Formula>
</Configuration>

我想更新 Formula元素的值,而不是替换整个值。

例如,我可以使用replace value of方法更改元素的整个值,但我最终想要的是以下内容:

<Configuration>
    <Formula>{LENGTH} * {Y} * {Z}</Formula>
</Configuration>

当然,我只想在元素值(想想,搜索和替换)中找到值“{X}”的地方完成此操作。

这是否可以使用T-SQL中的XML方法?如果是这样,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

这个怎么样?

此代码将在派生表中转换XML并从那里重新创建XML ...

DECLARE @xml XML=
'<Configuration>
    <Formula>{X} * {Y} * {Z}</Formula>
    <Formula>{A} * {Y} * {Z}</Formula>
    <Formula>{A} * {X} * {X}</Formula>
</Configuration>';

DECLARE @replX NVARCHAR(100)=N'LENGTH';

WITH AllFormulas AS
(
    SELECT f.value('.','nvarchar(max)') AS Formula 
    FROM @xml.nodes('Configuration/Formula') AS A(f)
)
SELECT REPLACE(Formula,N'X',@replX)
FROM AllFormulas
FOR XML PATH('Formula'),ROOT('Configuration')

结果

<Configuration>
  <Formula>{LENGTH} * {Y} * {Z}</Formula>
  <Formula>{A} * {Y} * {Z}</Formula>
  <Formula>{A} * {LENGTH} * {LENGTH}</Formula>
</Configuration>