java - 调用采用大型 XML 文件作为参数的 SQL 过程的最佳方法是什么?

标签 java sql-server xml tsql callable-statement

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

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

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

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

最佳答案

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

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

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

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

<小时/>

如果 BCP 不适合您,那么使用 SSIS 的类似解决方案也许可行。

<小时/>

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

关于java - 调用采用大型 XML 文件作为参数的 SQL 过程的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161944/

相关文章:

sql-server - 根据子记录更新父表

java - 在其他计算机上运行时导出的 .jar 给出 "No suitable driver found for jdbc"

android - 无法转换为维度 : type=0x12

c# - 使用 LINQ to XML 构建 SOAP 信封

java - 将整数转换为罗马数字 - Java

java - ByteArrayOutputStream 会发生什么样的 JVM 优化?

java - 如何从Hadoop作业的Reducer中将数据加载到dynamodb表中

c# - 尝试在 sql server 中插入日期和时间但出现错误

java - 如何解决 "java.lang.InstantiationException"?

java - 具有路径变量的多个请求映射值