以编程方式将XML数据导入MS SQL Server

时间:2009-06-05 21:15:56

标签: sql sql-server xml

我有 5 large XML files ,我很想分析。所有这些都太大而无法在文本编辑器中打开,因此我不知道他们的XML模式。

我曾尝试将它们导入SQL服务器,但是这个过程给了我一个错误,即使我很确定它们是有效的,因为它们来自非常声誉良好的程序员

我还尝试了其他方法,但每个方法都在使用大文件大小( MySQL ),或者声明文件包含无效的XML字符( Access& Excel )。

我如何以编程方式读取和插入数据?可以通过SQL查询完成吗?

非常感谢!

11 个答案:

答案 0 :(得分:5)

截至2013年......

我认为在SQL Server中加载大型/大型XML文件的唯一一次保存选项是(正如之前曾提到过的人)使用 SQLXML 4.0 库。

这是我每天用来加载大量XML文件( 7GB大小)的解决方案。在Script Task中使用C#操作的上一个过程需要数小时才能完成。使用SQLXML 4.0需要 15-20分钟。如何安装SQLXML 4.0。一步一步here。关于如何端到端follow this MSDN link的实际例子。

我的XML也有嵌套元素,所以它非常复杂,结果是10个表,每个行有250到400万行(每日文件有时超过7GB)。我的工作完全基于我从上面提供的两个链接中学到和应用的信息。

  • <强>优点

  • <强>缺点

    • 创建XSD可能需要一段时间,需要一些知识。当我这样做时,我学会了一些新东西,所以这对我来说并不是一个真正的劣势。
    • 当看到SSIS包的简单程度时,您的经理会觉得您没有做任何工作。

要查看大文件,请使用Large Text File Viewer,这是一个不错的小宝石。

注意:问题已经很久了,但“问题”仍然很热门。我为谷歌如何在SSIS中加载XML文件并在这里​​登陆的开发人员添加了这篇文章。

答案 1 :(得分:4)

尝试Microsoft的免费LogParser实用程序: http://www.microsoft.com/DownLoads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

它旨在为您提供对包括XML在内的大型文本文件的类似SQL的访问。像

这样的东西
Select top 1000 * from myFile.xml

......应该让你开始。另外,请注意文档将在安装后的可执行文件旁边的开始菜单中显示 - 我认为没有好的副本在线。

答案 2 :(得分:3)

请参阅非官方StackOverflow团队成员Brent Ozar撰写的博客文章:
http://www.brentozar.com/archive/2009/06/how-to-import-the-stackoverflow-xml-into-sql-server/

答案 3 :(得分:1)

您必须了解架构。尝试下载TextPad或类似内容以查看文件。

一旦了解了架构,就可以做一些事情来使它们进入SQL。一种方法是使用OpenXML http://msdn.microsoft.com/en-us/library/ms186918.aspx

答案 4 :(得分:1)

我已经广泛测试了mssql xml解析器,bcp.exe实用程序非常适用于此。诀窍在于提供正确的行终止符,因为它必须是文档中不会出现的值。例如,你可以这样做:

create table t1(x xml)

Ceate一个简单的文本文件,其中只包含 您选择的分隔符。例如,将此字符串放在delim.txt中:

  

- ++++++++ -

然后从命令行将其连接到文档实例的末尾:

  

复制myFile.xml + delim.txt out.xml / b

在此之后,您可以将其BCP到数据库中,如:

  

out.xml -T -c中的bcp.exe test.dbo.t1   -r - ++++++++++++++++

如果文档是UTF-16,则用-w

替换-c开关

答案 5 :(得分:1)

您是否尝试过SQL Server XML Bulk Load

答案 6 :(得分:1)

我做的第一件事就是获取XML文件的前X个字节(例如前1 MB),这样我就可以用我选择的编辑器来查看它们。

如果你安装了Cygwin,那么你已经拥有了一个很好的GNU工具来实现这个目标: head

head.exe -c1M comments.xml > comments_small.xml

或者,您可以在此处找到大多数GNU实用程序的本机端口:http://unxutils.sourceforge.net/

答案 7 :(得分:0)

为了查看非常大的文件,我发现V file viewer非常棒。

我在大到8GB的文件上使用过它。对于具有固定记录长度的文件,根据块大小进行导航非常容易,因为它是基于磁盘的。

请注意,没有编辑功能。

话虽如此,XML的一个难点在于它对于大型“流”来说并不是一个好的格式,因为它有一个整体的开始和结束结构,并且一个无法将整个文件保存在内存中的解析器可能需要做一些非常花哨的技巧,以确保它符合DTD或架构。

答案 8 :(得分:0)

答案 9 :(得分:0)

您是否尝试使用OPENROWSET将大型XML文件导入SQL Server表?

CREATE TABLE XmlTable
(
    ID INT IDENTITY,
    XmlData XML
)

INSERT XmlTable(XmlData)
  SELECT * FROM 
    OPENROWSET(BULK '(your path)\xmldata.xml',
    SINGLE_BLOB
) AS X

由于手边没有任何5GB文件,我自己无法真正测试。

还有另一种解决方法:流式传输Linq-To-Xml。查看这个blog post,其中James Newton-King演示了如何逐个阅读XElement,以及Microsoft XML团队对同一主题的两部分系列herehere博客。

马克

答案 10 :(得分:0)

您应该将XML加载到XML database,例如Berkeley DB XMLXindice

另外,我不确定它是否可以扩展到850mb,但First Object XML Editor和构建它的解析器库可以处理相当大的文件。

此外,Baretail应该显示您的文件而不会出汗。

相关问题