在T-SQL中优化XML更新

时间:2014-09-09 15:58:59

标签: sql-server xml tsql

考虑到以下错误 - 任何想法如何优化下面的代码?

  

在SET子句中多次指定列名“MyXmlColumn”。在同一SET子句中不能为列分配多个值。修改SET子句以确保列只更新一次。如果SET子句更新视图的列,则列名称“MyXmlColumn”可能会在视图定义中出现两次。

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''play'']/text())[1] with "false"')

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''eat'']/text())[1] with "false"')

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''work'']/text())[1] with "false"')

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''kill'']/text())[1] with "false"')

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''wash'']/text())[1] with "false"')

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''home'']/text())[1] with "false"')

UPDATE #tempTable
SET MBO.modify('replace value of (/*[local-name()=''configuration'']/*[local-name()=''sleep'']/text())[1] with "true"'),    
    ToPayment  = 1


这是灵魂:这是解决方案:: CREATE FUNCTION [dbo]。[SBOObject] (
     - 在此处添加函数的参数     @ var2 XML,
    @ var1 nvarchar(5),     @ var3 nvarchar(5),

) 返回XML 如 BEGIN
        SET @ var2.modify('declare default element namespace“http://schemas.ObjectWorld”;用sql:variable(“@ var1”)'替换(/ configuration / sleep / text())[1]的值         SET @ var2.modify('declare default element namespace“http://schemas.ObjectWorld”;将(/ configuration / work / text())[1]的值替换为sql:variable(“@ var3”)')

RETURN @var2

END

1 个答案:

答案 0 :(得分:0)

CREATE FUNCTION [dbo].[SBOObject]


     - 在此处添加函数的参数     @ var2 XML,
    @ var1 nvarchar(5),     @ var3 nvarchar(5),

) 返回XML 如 BEGIN
        SET @ var2.modify('声明默认元素命名空间" http://schemas.ObjectWorld&#34 ;;用sql:variable替换(/ configuration / sleep / text())[1]的值(& #34; @ var1的")')         SET @ var2.modify('声明默认元素命名空间" http://schemas.ObjectWorld&#34 ;;用sql:variable替换(/ configuration / work / text())[1]的值(& #34; @ var3")')

-- RETURN @var2

- END