将数据从XML文件导入SQL数据库

是否可以将数据从XML文件导入SQL数据库,如果可以,将如何完成。 我有一个包含大约5万个条目的XML文件,我必须创建一个可以操作该数据的应用程序(主要是读取和比较) – 所以我担心的是用这么多数据进行操作(并且很有可能将来会有更多的事情会变得非常缓慢和低效。 如果您认为其他选项会更好,请提供建议。 谢谢

您可以使用SQL Server导入和导出向导 。 您还可以查看SQL Server Integration Services 。 如果要使用C#,则SQL Server确实支持XML数据类型。 你可以利用它。

您还可以尝试读取数据集中的数据,然后使用BulkInsert在SQL Server中插入数据

DataSet reportData = new DataSet(); reportData.ReadXml(Server.MapPath("yourfile.xml")); SqlConnection connection = new SqlConnection("DB ConnectionSTring"); SqlBulkCopy sbc = new SqlBulkCopy(connection); sbc.DestinationTableName = "yourXMLTable"; 

编辑:对于SQL Server 2005,请检查SQL Server 2005导入/导出向导

尝试从Microsoft Sql Server Intergration Services查看SSIS工具

http://msdn.microsoft.com/en-us/library/ms141026.aspx

http://www.microsoft.com/sqlserver/en/us/solutions-technologies/enterprise-information-management/integration.aspx

使用此工具,您可以创建保存和运行导入包,并使用过滤和自定义选择。 可能您可以将其用作问题的完整解决方案。

在情况下我得到了从xml文件中读取数据的要求,并将该xml文件作为参数发送到存储过程有用链接http://www.aspdotnet-suresh.com/2012/12/aspnet-send-xml-file-as-parameter -to.html

Snaplogic等产品具有“快照”,意味着读取xml文件的连接器,解析它然后将其移动到数据库中而无需编写任何代码行。 看看Snaplogic 。

另一个需要考虑的选择是:

给出以下xml

    1 FirstName1 LastName1   2 FirstName2 LastName2   

您可以使用以下查询来选择内容。

 select xaquery('Id').value('.', 'int') as Id , xaquery('FirstName').value('.', 'nvarchar(50)') as FirstName , xaquery('LastName').value('.', 'nvarchar(50)') as LastName from ( select CAST(x AS XML) from OPENROWSET (BULK 'C:\Users\jmelosegui\Desktop\Clients.xml', SINGLE_BLOB) as T(x) ) T(x) cross Apply x.nodes('Clients/Client') as x(a) 

完成后,你可以加入其他表,或者在插入数据后进行匹配,所有这些都来自sql server端。

它在很大程度上取决于xml文件的复杂性(对象的深度与嵌套对象的对比,数据的种类和大小等)。

虽然SSIS可以是一个解决方案,如果你有知识,一个简单的c#应用程序也可以完成这项工作。

申请应该:

  1. 定义表示数据的持久性agnostig类
  2. 读取xml以加载此类的列表(在非常繁重的卷上可能需要分页
  3. 使用ado或linq to sql将数据推送到数据库(entity framework是可能的,但对于简单的批量导入可能太多了

另一种方法也可以使用执行相同类型工作的简单PowerShell脚本。