以XML格式更新列使用T-SQL选择数据SQL表

时间:2014-09-03 11:07:57

标签: sql sql-server xml

我在SQL表中有数据,我想查询XML格式的现有数据的某些列(使用For XML)或任何最佳实践,然后将XML FOrmat更新为具有XML数据类型的同一表中的列。如果您注意到以下示例,则节点SALARY不是列名称,而是常量值。 (在此示例中,有两个AMT列作为AMT1和AMT2,有时可能会因AMT3而变化),因此SALARY NODE也应该增加下一个数字。如果任何一个建议如何处理它将会有很大帮助。 我的数据格式是:


EMPNAME  YEAR     MONTH AMT1     AMT2
smith     2013     jan  5000     6000
Ray       2014     feb  4000     5000
Jones     2013     apr  6000     3000

我想要的XML格式是:

<EMPLOYEE>
  <EMPNAME>Smith</EMPNAME>
  <SALARYDETAILS>
     <SALARY>1<SALARY>
     <AMOUNT>5000</AMOUNT>
     <SALARY>2<SALARY>
     <AMOUNT>6000</AMOUNT>
  </SALARYDETAILS>
</EMPLOYEE>
<EMPLOYEE>
      <EMPNAME>Ray</EMPNAME>
      <SALARYDETAILS>
         <SALARY>1<SALARY>
         <AMOUNT>4000</AMOUNT>
         <SALARY>2<SALARY>
         <AMOUNT>5000</AMOUNT>
      </SALARYDETAILS>
    </EMPLOYEE>

我尝试了这样的基本SQL,但不知道如何添加不是sql列之间的节点,例如&#39; SALARYDETAILS&#39;

SELECT  EMPNAME ,AMT1,AMT2 FROM  EMPLOYEE
FOR XML RAW  (''), ROOT ('EMPLOYEE') - This SQL also gives error as Empty Tags cannot be passed 

。 谢谢Mikael,这非常有帮助,我可以得到关于指定虚节点的想法,但要求是,节点数量的数量可能因数据而异,因此SALARY节点也将依赖于它...就像某些记录一样可能只有一个AMT1,有些可能有3个AMT列..所以它可能会有所不同,因此必须动态构建查询。我甚至可以使用存储过程。谢谢..

嗨,任何想法如何在存储过程中连接2个xml变量。

1 个答案:

答案 0 :(得分:1)

如果我理解你想要什么,你可以在查询中将薪水节点指定为常量。

select E.EMPNAME,
       1      as 'SALARYDETAILS/SALARY',
       E.AMT1 as 'SALARYDETAILS/AMOUNT',
       2      as 'SALARYDETAILS/SALARY', 
       E.AMT2 as 'SALARYDETAILS/AMOUNT'
from EMPLOYEE as E
for xml path('EMPLOYEE')