基于单个属性的值列表删除XML中的节点 - MS SQL SERVER 2012中的xquery

时间:2014-05-23 12:33:37

标签: xquery

我是XQuery的总菜鸟,但在开始深入研究之前,我想请一些专家就我是否正在寻找正确的方向提出建议。

我在表格中看到了XML:

'<JOURNALEXT>
<JOURNAL journalno="1" journalpos="1" ledgercode="TD1">
</JOURNAL>
<JOURNAL journalno="1" journalpos="1" ledgercode="TD2">
</JOURNAL>
<JOURNAL journalno="1" journalpos="1" ledgercode="TD3">`enter code here`
</JOURNAL>
-----almost 50 such nodes
</JOURNALEXT>'

现在分类帐代码属性的值在某个表中。我必须过滤其分类码值不在表格中的值的所有节点。

例如,我的ledger_code表有两个条目TD1&amp; TD2

所以我应该得到结果XML

<JOURNALEXT>

<JOURNAL journalno="1" journalpos="1" ledgercode="TD3">
</JOURNAL>
-----almost 50 such nodes
</JOURNALEXT>

我可以使用基于一个属性删除节点。

declare @var_1 varchar(max) = 'TD1' 
        BEGIN TRANSACTION 
update [staging_data_load].[TBL_STG_RAWXML_STORE] WITH (rowlock) 
set XMLDATA.modify('delete /JOURNALEXT/JOURNAL[@ledgercode!= sql:variable("@var_1")]') 
where job_id=@job_Id 

但我的情况非常复杂。我需要从表中获取多个分类帐,并确保只保留包含分类帐表的节点。休息全部被删除。

我正在使用MS SQL SERVER 2012 ...作为数据库并尝试编写xquery。

0 个答案:

没有答案