调用SQL过程的最佳方法是什么,该过程将大型XML文件作为参数?

时间:2014-06-11 11:38:12

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

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

XML包含相关表的多个记录。存储的proc将XML文件内容作为(TEXT)参数,创建指针(sp_xml_preparedocument)&使用OPENXML插入表格。

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

XML文件大约是160MB,现在我通过读取CallableStatement的大型String对象来发送XML文件,但它的时间/空间/资源消耗很大。

1 个答案:

答案 0 :(得分:0)

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

  1. 将XML转换为可轻松加载的文件,例如符合BCP标准的脚本
  2. BCP /将数据加载到临时表/临时表
  3. SQL合并数据。这样做的好处是,您可以根据用例优化SQL。
  4. 在这种情况下,不需要在内存中“传递”大量blob,因此依赖于SQL Server BCP加载技术的高级处理而不是MSXML。

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


    如果BCP不是你的一杯茶,那么使用SSIS的类比解决方案也许可行。


    最后,如果你必须使用XML文件,那么可能将文件的名称传递给SQL CLR程序,该程序将把它加载到SQL内存中。可能是有序的。