Sql server Sql Xquery如何替换更新查询中的文本

Sql server Sql Xquery如何替换更新查询中的文本,sql-server,sql-update,xquery-sql,xquery-update,Sql Server,Sql Update,Xquery Sql,Xquery Update,表名为MasterTable 纵队 ID类型BIGINT NametypeVARCHAR(200)(出于某些原因存储xml类型数据) Name包含结构如下的数据 SomeEnglishTextSomeItalicText 当我需要更新主表时,我需要将Varchar转换为xml,然后有条件地更新/替换特定标记的值部分,即en-US/it 另外,名称列中可能没有数据/标记,因此我认为在插入数据时,它会在表中插入空标记元素,如,因此,updatequery必须处理标记元素中的空值,即en-US/it

表名为
MasterTable

纵队

ID
类型
BIGINT

Name
type
VARCHAR(200)
(出于某些原因存储
xml
类型数据)

Name
包含结构如下的数据

SomeEnglishTextSomeItalicText

当我需要
更新
主表
时,我需要将
Varchar
转换为
xml
,然后有条件地更新/替换
特定标记的
部分,即
en-US/it

另外,名称
列中可能没有数据/标记,因此我认为在插入数据时,它会在表中插入空标记元素,如
,因此,
update
query必须处理标记元素中的空值,即
en-US/it

我正试着像下面的更新查询那样做

DECLARE @Str VARCHAR(200)

SET @Str = 'Test Text'

UPDATE [MasterTable]
SET [Name] = cast([MasterTable].[Name] as xml).modify('replace value of (en-US/text())[1] with sql:variable("@Str")')
WHERE [ID]=18
我在运行查询时遇到以下错误

非法使用xml数据类型方法“modify”。在此上下文中,需要一个非mutator方法


您不能从xml.modify分配。Modify直接作用于变量/列。也不能对强制转换使用“修改”

您可以将名称提取到xml变量,修改xml,然后将其放回表中

declare @str varchar(200) = 'Test'
declare @xml xml

select @xml = cast(Name as xml)
from MasterTable
where ID = 18

set @xml.modify('replace value of (en-US/text())[1] with sql:variable("@Str")')

update MasterTable
set Name = cast(@xml as varchar(200))
where ID = 18
如果需要一次处理多行,可以使用列为
id
name
的表变量,其中name的数据类型为
xml
,而不是
@xml
变量

declare @str varchar(200) = 'Test Text'
declare @T table (ID int, Name xml)

insert into @T
select ID, cast(Name as xml)
from MasterTable
where Name is not null

update @T
set Name.modify('replace value of (en-US/text())[1] with sql:variable("@Str")')

update MasterTable
set Name = cast(T.Name as varchar(200))
from @T as T
where MasterTable.ID = T.ID

我已经将这个
declare@str varchar(200)='Test'
更改为
declare@str varchar(200)set@str='Test'
,它成功了。。谢谢,如果前面的代码是
COALESCE(@Name,Name)
,现在我想把它改成
updatemastertable set Name=Name.modify('replace value of(en-US/text())[1]为sql:variable(@Str'),你能告诉我怎么做吗其中ID=18
like wise,即在@StrAlso中处理空值,因为
Name
列是
VARCHAR(200)
,所以我面临直接调用上的
modify
的问题it@Harsh:不能直接在varchar列上调用modify。您需要将其移动到xml列(或变量)在我的回答中使用modify as在代码中。因此,这里我们需要首先获取单独的
@xml
变量中的值,因此如果我们有多个列作为
名称
进行更新,那么我们需要声明多个
@xml
变量来更新多个语言列,我认为这是不好的。。。