【发布时间】:2013-08-08 00:45:21
【问题描述】:
我们有一个更新程序应用程序,它在 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 语句。
我没有在这个问题上进一步询问,只是想我会分享我在哪里。
【问题讨论】:
-
简单地查找字符串
GO也行不通,因为其中可能有一个字符串正在插入/更新一些带有单词“go”的文本 -
答案,我不知道,但我建议将整个脚本放入一个存储过程中并稍作修改,以便将每个操作的结果写入一组专用临时表每次运行时都会重写,这样脚本的结果就可以通过对这些临时表的特定查询来识别。我在数据仓库工作的日子教会了我临时表在冗长而复杂的数据库操作中的价值,尤其是当 DBMS 本身进行大量处理时。只是一个建议。 HTH。
-
所以答案是由我来决定如何执行 SQL 脚本。甜的!现在我可以为此编写自己的组件了。
-
更糟糕的是,
GO本身并不持久。你可以例如configure your own batch terminator在 Management Studio 中,因此您可以使用GOJOHNNYGO分隔符生成脚本,例如
标签: sql-server delphi delphi-xe2 sql-scripts