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

Posted

技术标签:

【中文标题】将数据从 XML 文件导入 SQL 数据库【英文标题】:Importing data from XML file to SQL database 【发布时间】:2012-06-03 11:28:42 【问题描述】:

是否可以将 XML 文件中的数据导入 SQL 数据库,如果可以,如何进行。我有一个包含大约 50 000 个条目的 XML 文件,我必须制作一个可以操作该数据(主要是读取和比较)的应用程序 - 所以我担心的是使用这么多数据的操作(并且很有可能将来会有更多)将非常缓慢且效率低下。 如果有其他你认为更好的选择,请指教。 谢谢

【问题讨论】:

你为什么不在数据库中进行操作。使用 Linq to XML,您可以读取 XML 文件,然后将其存储为一个集合,并将其作为 xml 输入发送到您执行所有操作的存储过程。 您可以使用 XPathNavigator 对象解析 XML,然后使用 SqlCommand 对象将数据插入到表中。互联网上有很多这两个对象的代码示例。 如果您使用任何 MS BI 工具,那么您可能会想到使用 SSIS 从 XML 加载数据,进行操作,然后将数据转储到 sql server 中。 【参考方案1】:

您可以使用SQL Server Import and Export Wizard。您也可以查看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 Import / Export Wizard

【讨论】:

是的,我使用的是 C#。我需要哪个 SQL 服务器?我的计算机上安装了 SQL Server 2005,但我找不到您给我的链接中列出的工具(导入和导出向导)。我只有配置工具。 @NDraskovic 查看此链接msdn.microsoft.com/en-us/sqlserver/bb671393.aspx,还可以查看是否可以找到 DTS 或数据转换服务 @NDraskovic,见databasejournal.com/features/mssql/article.php/3580216/…我也更新了我的答案 好的,我看看我能做什么。谢谢你的回答【参考方案2】:

尝试查看 Microsoft 的 SSIS 工具 Sql Server 集成服务

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

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

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

【讨论】:

【参考方案3】:

诸如 Snaplogic 之类的产品具有“快照”,即连接器可以读取 xml 文件,对其进行解析,然后将其移动到数据库中,而无需编写任何代码行。看看Snaplogic。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

给定以下 xml

<?xml version="1.0" standalone="yes" ?>
<Clients>
  <Client>
    <Id>1</Id>
    <FirstName>FirstName1</FirstName>
    <LastName>LastName1</LastName>
  </Client>
  <Client>
    <Id>2</Id>
    <FirstName>FirstName2</FirstName>
    <LastName>LastName2</LastName>
  </Client>
</Clients>

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

select 
    x.a.query('Id').value('.', 'int') as Id
    , x.a.query('FirstName').value('.', 'nvarchar(50)') as FirstName
    , x.a.query('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 端。

【讨论】:

【参考方案6】:

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

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

应用程序应该:

    定义一个代表您的数据的持久性不可知类 读取 xml 以加载此类的列表(在非常大的卷上可能需要分页 使用 ado 或 linq to sql 将数据推送到数据库(实体框架是可能的,但对于简单的批量导入来说可能太多了

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

【讨论】:

以上是关于将数据从 XML 文件导入 SQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

将 XML 文件导入 SQL Server 时唯一标识符转换失败

将 ICD-10 代码 xml 文件导入数据库

将xml文件导入sql server表

将一个元素复制到多行的 XML 导入 SQL

如何通过navicat for mysql将sql文件导入mysql

将数据从 Excel 文件导入 SQL 表而不重复?