gpt4 book ai didi

java - 如何在 Java/jtds 应用程序中支持 SQL GO 语句?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:04 25 4
gpt4 key购买 nike

我正在开发基于 Java 的 OSS 应用 SqlHawk它的功能之一是针对服务器运行升级 sql 脚本。

Microsoft 已将使用 GO 将脚本分成多个批处理作为惯例语句,这是个好主意,但只是要求在字符串上进行错误匹配。

目前我有一个非常初级的:

// split where GO on its own on a line
Pattern batchSplitter = Pattern.compile("^GO", Pattern.MULTILINE);
...
String[] splitSql = batchSplitter.split(definition);
...

哪种方法有效但容易被 quoted GO statements 之类的东西绊倒或缩进问题。

我认为让这个真正可靠的唯一方法是在应用程序中有一个 SQL 解析器,但我不知道如何去做,或者这是否最终会变得不那么可靠(特别是考虑到这个工具支持多个 DBMS)。

我可以用什么方法解决这个问题?此处的代码示例对我很有帮助。

Relevant sqlHawk code在 github 上。

目前正在使用 jtds执行在脚本中找到的批处理。

最佳答案

GO 是客户端批处理分隔符命令。您可以将其替换为;。它不应在您的 EXEC 动态 SQL 中发送。

USE master
GO --<----- client actually send the first batch to SQL and wait for a response
SELECT * from sys.databases
GO

应该翻译成

Application.Exec("USE master");
Application.Exec("SELECT * from sys.databases");

或者你可以这样写:

Application.Exec("'USE master;SELECT * from sys.databases")

更多关于 GO http://msdn.microsoft.com/en-us/library/ms188037(v=sql.90).aspx

关于java - 如何在 Java/jtds 应用程序中支持 SQL GO 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10734824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com