我在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变量。
答案 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')