【问题标题】:What is the best approach to invoke a MSSQL procedure, which takes a large XML file as an argument?调用将大型 XML 文件作为参数的 SQL 过程的最佳方法是什么?
【发布时间】:2014-06-11 11:38:11
【问题描述】:

我正在开发一个在 MSSQL DB 中插入 XML 文件内容的应用程序,每次启动应用程序服务器时。

XML 包含相关表的多条记录。存储过程将 XML 文件内容作为 (TEXT) 参数,创建一个指针 (sp_xml_preparedocument) 并使用 OPENXML 插入到表中。

我需要从 XML 文件所在的应用服务器使用 JDBC(或者可能是 SQLCMD)执行该过程。

XML 文件大约 160MB,现在我通过将 XML 文件作为大字符串对象读取到CallableStatement 来发送 XML 文件,但它非常耗费时间/空间/资源。

【问题讨论】:

    标签: java sql-server xml tsql callable-statement


    【解决方案1】:

    我不知道这是否是公认的最佳做法,但如果我这样做,我会认为这可能是以下方法的候选者:

    1. 将 XML 转换为易于加载的文件,例如符合 BCP 的脚本
    2. BCP/将数据加载到临时表/临时表中
    3. SQL 合并数据。这样做的好处是您可以针对您的用例优化 SQL。

    在这种情况下,无需“传递”内存中的大量 blob,从而依赖于 SQL Server BCP 加载技术的高级处理,而不是 MSXML。

    在这种情况下,对 SQL 的调用是简单的 sp 调用,参数指向文件。


    如果 BCP 不适合您,那么使用 SSIS 的类似解决方案可能会起作用。


    最后,如果您必须使用 XML 文件,那么也许将文件名传递给 SQL CLR 过程,该过程会将其加载到 SQL 内存中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2010-10-02
      • 2010-10-16
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多