gpt4 book ai didi

sql-server - 如何从 Delphi 中执行包含许多 GO 语句的大型 SQL 脚本?

转载 作者:行者123 更新时间:2023-12-03 15:48:20 25 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我们有一个更新程序应用程序,它在 SQL Server 数据库上执行超过 30,000 行代码的 SQL 脚本。在这个脚本中有大量的GO声明。我习惯使用的 ADO 组件不支持 GO陈述。我们一直使用 OSQL更新服务器时的命令行,这很难捕获问题(输出一个文本文件,然后我们必须解析该文件以查找错误和结果)。如果 Delphi 中的某些东西能够找到那些GO 那就更理想了。语句并一次执行每个块。

我明白 GO语句特定于能够执行它们的 MS 工具。脚本再次超过 30,000 行代码,至少有 500 GO声明。我们在 SQL Management Studio 和 OSQL 中为更新程序使用相同的脚本。但是 OSQL 并没有给我们需要的结果——它是执行这样一个脚本的一种草率的方式。

是否有任何适用于 Delphi 的现有 SQL Server 兼容工具可以识别 GO声明?我说的不一定是解析器(尽管我确定会涉及到解析),我说的是一个现成的实用程序,用于执行包含 GO 的 SQL 脚本。语句并返回每个脚本块的结果。

例如,一个块可能会创建一个表,然后 GO ,然后为该表和另一个 GO 创建一个存储过程.代码非常复杂,以至于在像 this question 这样的代码中实现它完全不可能。

更新

我已经成功地编写了一小段工作代码来执行此操作,但是它没有考虑 GO注释块中的语句。

Code found here

我没有在这个问题上进一步问什么,只是想我会分享我的位置。

最佳答案

将脚本加载到 TStringList会工作。找词GO单独一行(避免包含 GO 的嵌入文本)作为每个块或脚本本身的结尾。

您使用 GO行的索引 - 1 标记前一个块的结束,以及 GO行索引 + 1 作为下一个块的开始。如果GO index 等于 StringList.Count - 1,此时您已到达脚本的结尾。您可以在处理块之前启动事务,并在引发异常时回滚该事务。

关于sql-server - 如何从 Delphi 中执行包含许多 GO 语句的大型 SQL 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116148/

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