从SQL Server存储过程中的XML中提取键和值

时间:2012-10-25 09:22:41

标签: xml sql-server-2008 tsql xml-parsing

我收到像

这样的XML数据
<t>
  <ID>8</ID>
  <FirstName>name 8</FirstName>
  <LastName>surname 8</LastName>
  <DateOfBirth>1963-05-23T00:00:00</DateOfBirth>
</t>

在SQL Server存储过程中。有不同的xml数据格式(字段编号和字段名称可以不同)。现在,我应该提取每个字段及其值,并将每个字段/值作为单独的记录插入表中。

我是否有使用TSQL如何做到这一点的例子?

2 个答案:

答案 0 :(得分:2)

您可以轻松扫描XML - 如果它始终位于<t>根节点下并且始终只有一个级别:

DECLARE @input XML = '<t>
  <ID>8</ID>
  <FirstName>name 8</FirstName>
  <LastName>surname 8</LastName>
  <DateOfBirth>1963-05-23T00:00:00</DateOfBirth>
</t>'

SELECT
    FieldName = nodes.value('local-name(.)', 'varchar(50)'),
    FieldValue = nodes.value('(.)[1]', 'varchar(50)')
FROM
    @input.nodes('/t/*') AS Tbl(nodes)

输出是:

enter image description here

但这实际上取决于您现在想要对数据做什么 - 一旦您从XML中检索到它......您的目标表的结构是什么样的?

答案 1 :(得分:0)

@x是你的xml

insert yourtable (ID, Firstname, Lastname, DOB)
select 
    @x.value('(/t/ID)[1]','int'),
    @x.value('(/t/FirstName)[1]','varchar(50)'),
    @x.value('(/t/LastName)[1]','varchar(50)'),
    @x.value('(/t/DateOfBirth)[1]','datetime')

请参阅http://msdn.microsoft.com/en-us/library/ms178030(v=sql.100).aspx