什么是将XML数据保存到SQL Server的最佳方法?

10

有没有一种比较直接的方法?例如,SQL Server可以读取XML吗?

或者,最好是解析XML,然后通过ADO.Net以通常的方式传输它,可以作为单独行或批量更新?

我知道可能有涉及大型复杂存储过程的解决方案,虽然我并不完全反对这样做,但我倾向于将大部分业务逻辑放在C#代码中。我看到过使用SQLXMLBulkLoad的解决方案,但似乎需要相当复杂的SQL代码。

供参考,我每次将处理大约100行数据,每个数据包含约50个小数据(字符串和整数)。这将最终成为每天的批处理作业。

如果您能提供任何代码片段,将不胜感激。


我主要使用SQL Server 2005,虽然我也可以访问2008版。 - alchemical
5个回答

14

SQL Server 2005及以上版本有一种称为“XML”的数据类型,您可以在其中存储XML - 未经类型定义或使用XSD模式进行类型定义。

您可以基本上使用XML字面字符串填充类型为XML的列,因此您可以轻松地只使用常规INSERT语句并将XML内容填充到该字段中。

Marc


我使用这个工具将CML导入SQL Server后,SQL Server会自动将XML解析成字段吗?还是我需要在存储过程或表中手动完成解析? - alchemical
不是的,它被存储为XML字段 - 您可以使用XPath和XQuery查询它。您具体要查找什么? - marc_s

4
您可以使用函数 OPENXML 和存储过程 sp_xml_preparedocument 轻松将 XML 转换为行集。

自 SQL Server 2005 起,永远不要使用 sp_xml_preparedocument!! - gbn
为什么不呢?有替代方案吗? - alchemical

2

如果您正在使用SQL Server 2008(或2005),它具有一个xml本地数据类型。您可以将XSD架构与xml变量关联,并直接插入xml类型的列中。


2

是的,SQL Server 2005及以上版本可以直接解析XML。

您可以使用nodes、value和query方法来按照您想要的方式进行分解,无论是值还是属性。

以下是一些无耻的推销:


1
Xml数据和Xml文档可能有不同的含义。当xml类型适用于数据时,它不会保存格式(删除空格),因此在某些情况下(例如配置文件),最好的选择是nvarchar。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接