Sql server 基于多个XML属性筛选XML节点以进行更新

Sql server 基于多个XML属性筛选XML节点以进行更新,sql-server,xml,tsql,xml-dml,Sql Server,Xml,Tsql,Xml Dml,在下面的查询中,我正在更新数据库表X中Items列的xml节点中的一个值。现在我只根据Name属性进行过滤。因为有多个同名节点,所以我需要能够在更新期间过滤更多属性 更新dbo.Declarations 设置项。修改('替换的值 (/Items/Item[@Name=(sql:variable(@ItemName))]/text())[1] 使用sql:variable(“@Value”)”) 其中DeclarationId=@DeclarationId 结束 是否可以基于多个属性值选择一个X

在下面的查询中,我正在更新数据库表X中Items列的xml节点中的一个值。现在我只根据Name属性进行过滤。因为有多个同名节点,所以我需要能够在更新期间过滤更多属性

更新dbo.Declarations
设置项。修改('替换的值
(/Items/Item[@Name=(sql:variable(@ItemName))]/text())[1]
使用sql:variable(“@Value”)”)
其中DeclarationId=@DeclarationId
结束
是否可以基于多个属性值选择一个XML节点,然后更新该节点的值

UPDATE dbo.Declarations
    SET Items.modify('replace value of 
 (/Items/Item[@Name=(sql:variable("@ItemName"))][@Attr=(sql:variable("@newParam"))]/text())[1] 
 with sql:variable("@Value")')
   WHERE DeclarationId = @DeclarationId
END

我们应该这样做;假设您有一个名为Attr的属性和一个新的sql变量@newParam。

您可以在谓词中使用
,并添加更多检查

declare@xxml='1〕
价值1
价值2
'
声明@Value varchar(10)='NewValue2'
声明@Name varchar(10)='Name2'
声明@typevarchar(10)='Type2'
设置@X.modify('s)
替换(/Items/Item)的值[
@Name=sql:variable(@Name)和
@Type=sql:变量(“@Type”)
]/text())[1]
带sql:variable(“@Value”)
')