SQL XML中的动态XML节点名称

时间:2013-11-15 17:48:42

标签: sql xml sql-server-2008

我正在使用临时表中列的值更新XML列。我可以更新表格如下。

UPDATE  tbWorkflow 
SET     xmlData.modify('insert 
                (<FromQueueName>
                <CustomerID>{ sql:column("T.iVTollCustID") }</CustomerID>
                <Date>{ sql:variable("@CurrDateTime") }</Date>
                </FromQueueName>)                           
                as first into (/configuration)[1]'),
        vcQueue             =   'qVtoll',
        dtUpdTime           =   GETDATE()
FROM    #Trxns    T 
WHERE   T.biWorkflowID      =   tbWorkflow.biWorkflowID   

但是,我希望节点名称是动态的(来自临时表),如下所示。但它不起作用。

UPDATE  tbWorkflow 
SET     xmlData.modify('insert 
                (<**{ sql:column("T.vcQueue") }**>
                <CustomerID>{ sql:column("T.iVTollCustID") }</CustomerID>
                <Date>{ sql:variable("@CurrDateTime") }</Date>
                </**{ sql:column("T.vcQueue") }**>)                         
                as first into (/configuration)[1]'),
        vcQueue             =   'qVtoll',
        dtUpdTime           =   GETDATE()
FROM    #Trxns    T 
WHERE   T.biWorkflowID      =   tbWorkflow.biWorkflowID

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为,您应该使用子查询来选择所需的字符串,然后将其插入到XML中。 例如,在子查询中获取<YourTag><CustomerID>123</CustomerID><Date>15.10.2012</Date></YourTag>,然后您只需将其插入XML

即可

答案 1 :(得分:0)

我找到了解决方法来做到这一点。

我在临时表中添加了另一个VARCHAR列,将xml节点创建为varchar,然后使用此varchar列修改了我的实际xml列。

UPDATE  #Trxns
SET     xmlVarchar = '<' + vcQueue + '>
        <CustomerID>' + CONVERT(VARCHAR(10),iVTollCustID) + '</CustomerID>
        <Date>' + CONVERT(VARCHAR(25), GETDATE(),22) + '</Date>' +
        '</' + vcQueue + '>'


UPDATE  tbWorkflow 
SET     xmlData.modify('insert 
                sql:column("xmlVarchar")
                as first into (/configuration)[1]'),
        vcQueue             =   'qVtoll',
        dtUpdTime           =   GETDATE()
FROM    #Trxns    T  
WHERE   T.biWorkflowID      =   tbWorkflow.biWorkflowID