将Xml转换为表SQL Server

我想知道如何读取一个XML数据并将其转换为TSQL中的表?

例如:

<row> <IdInvernadero>8</IdInvernadero> <IdProducto>3</IdProducto> <IdCaracteristica1>8</IdCaracteristica1> <IdCaracteristica2>8</IdCaracteristica2> <Cantidad>25</Cantidad> <Folio>4568457</Folio> </row> <row> <IdInvernadero>3</IdInvernadero> <IdProducto>3</IdProducto> <IdCaracteristica1>1</IdCaracteristica1> <IdCaracteristica2>2</IdCaracteristica2> <Cantidad>72</Cantidad> <Folio>4568457</Folio> </row> 

 8 3 8 8 25 4568457 3 3 1 2 72 4568457 

谢谢。

这是答案,希望它可以帮助别人:)

首先,他们是如何写xml的两个变种:

1

 <row> <IdInvernadero>8</IdInvernadero> <IdProducto>3</IdProducto> <IdCaracteristica1>8</IdCaracteristica1> <IdCaracteristica2>8</IdCaracteristica2> <Cantidad>25</Cantidad> <Folio>4568457</Folio> </row> <row> <IdInvernadero>3</IdInvernadero> <IdProducto>3</IdProducto> <IdCaracteristica1>1</IdCaracteristica1> <IdCaracteristica2>2</IdCaracteristica2> <Cantidad>72</Cantidad> <Folio>4568457</Folio> </row> 

回答:

 SELECT Tbl.Col.value('IdInvernadero[1]', 'smallint'), Tbl.Col.value('IdProducto[1]', 'smallint'), Tbl.Col.value('IdCaracteristica1[1]', 'smallint'), Tbl.Col.value('IdCaracteristica2[1]', 'smallint'), Tbl.Col.value('Cantidad[1]', 'int'), Tbl.Col.value('Folio[1]', 'varchar(7)') FROM @xml.nodes('//row') Tbl(Col) 

2。

 <row IdInvernadero="8" IdProducto="3" IdCaracteristica1="8" IdCaracteristica2="8" Cantidad ="25" Folio="4568457" /> <row IdInvernadero="3" IdProducto="3" IdCaracteristica1="1" IdCaracteristica2="2" Cantidad ="72" Folio="4568457" /> 

回答:

 SELECT Tbl.Col.value('@IdInvernadero', 'smallint'), Tbl.Col.value('@IdProducto', 'smallint'), Tbl.Col.value('@IdCaracteristica1', 'smallint'), Tbl.Col.value('@IdCaracteristica2', 'smallint'), Tbl.Col.value('@Cantidad', 'int'), Tbl.Col.value('@Folio', 'varchar(7)') FROM @xml.nodes('//row') Tbl(Col) 

取自:

  1. http://kennyshu.blogspot.com/2007/12/convert-xml-file-to-table-in-sql-2005.html

  2. http://msdn.microsoft.com/en-us/library/ms345117(SQL.90).aspx

使用sp_xml_preparedocument

详细检查: http : //technet.microsoft.com/en-gb/library/ms186918.aspx

至于你的问题:

 DECLARE @XML XML SET @XML = '<rows><row> <IdInvernadero>8</IdInvernadero> <IdProducto>3</IdProducto> <IdCaracteristica1>8</IdCaracteristica1> <IdCaracteristica2>8</IdCaracteristica2> <Cantidad>25</Cantidad> <Folio>4568457</Folio> </row> <row> <IdInvernadero>3</IdInvernadero> <IdProducto>3</IdProducto> <IdCaracteristica1>1</IdCaracteristica1> <IdCaracteristica2>2</IdCaracteristica2> <Cantidad>72</Cantidad> <Folio>4568457</Folio> </row></rows>' DECLARE @handle INT DECLARE @PrepareXmlStatus INT EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML SELECT * FROM OPENXML(@handle, '/rows/row', 2) WITH ( IdInvernadero INT, IdProducto INT, IdCaracteristica1 INT, IdCaracteristica2 INT, Cantidad INT, Folio INT ) EXEC sp_xml_removedocument @handle 

如果您在没有XSD / DTD模式的混合复杂types中使用recursion节点(节点“文件夹”的节点“文件夹”中的节点“文件夹”)深度嵌套XML文档(或json,html,sql),则可以使用该工具eXtractorONE(eXtractor.ONE)。 没有编程需要,没有XQuery,没有XSLT,几乎为零configuration。 大小没有限制。 只需指向带有XML文档的文件夹,select您的目标数据库并运行它。

要完成这样的转换任务,您可以考虑使用XMLFox Advance之类的XML映射转换工具。 多年来,我们一直在使用XMLFox高级转换器将消费者XML数据转换为SQL服务器表。