【问题标题】:What is the best way to save XML data to SQL Server?将 XML 数据保存到 SQL Server 的最佳方法是什么?
【发布时间】:2010-10-16 18:52:14
【问题描述】:

是否有一条非常直接的直接路线? (即 SQL Server 可以读取 XML)

或者,最好解析 XML 并通过 ADO.Net 以通常的方式将其作为单独的行或批量更新传输?

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

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

您可以提供任何代码 sn-ps 将不胜感激。

【问题讨论】:

  • 我主要使用 SQL Server 2005,尽管我确实可以访问 2008。

标签: sql-server xml ado.net etl bcp


【解决方案1】:

SQL Server 2005 及更高版本有一个名为“XML”的数据类型,您可以在其中存储 XML - 无类型或使用 XSD 架构键入。

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

马克

【讨论】:

  • 一旦我用它把 cml 放到 sql server 中,sql server 会以某种方式将 XML 解析成字段吗?还是我需要在 proc 或 table 中手动执行此操作?
  • 不,它存储为 XML 字段 - 您可以使用 XPath 和 XQuery 查询它。您到底在寻找什么?
【解决方案2】:

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

【讨论】:

  • 从 SQL Server 2005 起不再使用 sp_xml_preparedocument!!
  • 为什么不呢?有替代品吗?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    是的,SQL Server 2005 及更高版本可以开箱即用地解析 XML。

    您可以使用节点、值和查询方法将其分解为您想要的方式,无论是值还是属性

    一些无耻的插播:

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2014-07-13
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 2011-08-08
        • 2019-12-14
        • 2016-09-30
        相关资源
        最近更新 更多