【问题标题】:wildcard search update in SQL server for XML data coulmnSQL Server 中用于 XML 数据列的通配符搜索更新
【发布时间】:2016-03-11 11:17:08
【问题描述】:

我有一个表 T1,它有一个 XML 数据类型列 C1,在这里我只想更新域名。 确实需要 where 条件,我必须为整个表更新这个 例如:- 更新前 C1 列中的数据

    <DocumentElement>
      <DeliveryParameters>
       <EmailFromAddress>a1@**xyz**.com</EmailFromAddress>
       <EmailToAddress>a2@**xyz**.com;a3@**xyz**.com</EmailToAddress>
       <EmailCcAddress>a4@**xyz**.com</EmailCcAddress>
     </DeliveryParameters>
   </DocumentElement>

结果:- 更新后数据应该在 C1 中

<DocumentElement>
    <DeliveryParameters>
        <EmailFromAddress>a1@**abc**.com</EmailFromAddress>
        <EmailToAddress>a2@**abc**.com;a3@**abc**.com</EmailToAddress>
        <EmailCcAddress>a4@**abc**.com</EmailCcAddress>
    </DeliveryParameters>
</DocumentElement>

【问题讨论】:

    标签: sql-server sqlxml


    【解决方案1】:

    主要想法 - 重新创建 xml:

    DECLARE @x XML = '
    <DocumentElement>
        <DeliveryParameters>
            <EmailFromAddress>a1@xyz.com</EmailFromAddress>
            <EmailToAddress>a2@xyz.com;a3@xyz.com</EmailToAddress>
            <EmailCcAddress>a4@xyz.com</EmailCcAddress>
        </DeliveryParameters>
    </DocumentElement>'
    
    SELECT *
    FROM (
        SELECT col = t.c.value('local-name(.)', 'VARCHAR(100)'),
               val = REPLACE(t.c.value('.', 'VARCHAR(4000)'), '@xyz.com', '@abc.com')
        FROM @x.nodes('DocumentElement/DeliveryParameters/*') t (c)
    ) t
    PIVOT (
        MAX(val)
        FOR col IN ([EmailFromAddress], [EmailToAddress], [EmailCcAddress]) 
    ) p
    FOR XML PATH('DeliveryParameters'), ROOT('DocumentElement')
    

    【讨论】:

    • 如果我正确理解了这个问题,OP 不需要替换整个电子邮件,只需要替换 xyz 部分......总之这个问题相当不清楚......
    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多