【发布时间】:2018-09-03 13:59:18
【问题描述】:
我需要通过 Java 应用程序在 Microsoft SQL Server 2017 的新实例上执行带有 DDL 和 DML 命令的 SQL 脚本(约 5000 行),该应用程序已经部署和配置了连接池和数据源。
寻找解决方案我发现的唯一方法是将脚本加载到缓冲区中,读取它,然后将每一行分成一个语句,然后将这些语句中的每一个单独发送到数据库实例,就像在this example 中一样。
有没有更优雅或更简单的方法来做到这一点?
【问题讨论】:
-
无法保证 SQL 脚本可以逐行运行 - 例如,它可能会声明变量。脚本是否包含 GO 语句? GO 语句之间的每一段代码都作为自己的实体运行,因此您可以将它们分解。
-
@Cato 是的,我验证了脚本并且每个命令/查询都以 GO 语句结束。那么缓冲 GO 语句之间每一行的解析器方法可能会起作用吗?
-
在GO之间发送每个部分,GO省略
-
您可能不需要编写自己的解析器。例如,您可以使用 SqlTool 中的
SqlFile对象,如 this answer 中所示。
标签: java sql-server jdbc mssql-jdbc