表名为MasterTable
列
ID
类型为BIGINT
,
Name
类型为VARCHAR(200)
(以某些原因存储xml
类型数据)
Name
包含结构化数据
<en-US>SomeEnglishText</en-US><it-IT>SomeItalicText</it-IT>
当我需要更新
主表时,我需要将Varchar
转换成xml
,然后有条件地更新/替换特定标签的value
部分,即en-US/it-IT
。
还有可能Name
列中没有数据/标签,因此我认为在插入数据时应该在表中插入空标签元素,如<en-US></en-US><it-IT></it-IT>
,因此必须处理标签元素中的空值,即en-US/it-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”。在此上下文中,应该使用非变异方法。
@xml
变量中,因此如果我们有多列Name
需要更新,则需要声明多个@xml
变量来更新多个语言列,我认为这不是一个好方法... - Harsh Baid