如何检查 SQL 脚本是不是在 MS SQL Server 中成功执行?

Posted

技术标签:

【中文标题】如何检查 SQL 脚本是不是在 MS SQL Server 中成功执行?【英文标题】:How to check if an SQL Script executed successfully in MS SQL Server?如何检查 SQL 脚本是否在 MS SQL Server 中成功执行? 【发布时间】:2017-02-06 05:51:14 【问题描述】:

我创建了多个 SQL 数据库维护脚本,我需要按照定义的顺序运行这些脚本。我有 2 个脚本。我想运行第二个脚本,只有在成功执行第一个脚本时。这些脚本包含创建表、存储过程、SQL 作业等的查询。

请提出实现此目标的最佳方法。我正在使用 MS SQL Server 2012。 我正在尝试在不使用 SQL 作业的情况下实现它。

【问题讨论】:

ERRORLEVEL:看到这个答案***.com/a/29003974/21336 【参考方案1】:

我确定我说的是显而易见的,这可能是因为我不完全理解您所说的“成功执行”是什么意思,但是如果您的意思是运行时没有 SQL 错误: 实现它的最佳方法是为您的脚本创建一个作业,然后创建两个步骤 - 一个用于第一个脚本,一个用于第二个。完成这两个步骤后,您可以转到第 1 步的高级选项并根据您的需要进行设置。

Screenshot

【讨论】:

这确实很明显。但是,SQL 作业将是我最后的手段,因为我试图避免为此使用作业。感谢您的建议。 我接受了这个作为答案,因为它似乎是我问题的第一个答案。此外,我将在我的实现中使用这种方法。谢谢。 我明白了,也许你可以简单地在第三张表(我们称之为“tbl_script_verifier”)上有一个 0 位(我们称之为“first_script”)。在第一个脚本请求时将“first_script”设置为 0,并在成功完成第一个脚本后将其设置为 1。在您运行第二个脚本之前,您检查“first_script”是否设置为 1。这应该可以完成这项工作。您甚至可以在那里稍微花哨一点,并将其变成一个日志 - 设置日期脚本开始/结束等。 .【参考方案2】:

您可以创建 SQL Server 代理作业吗?您可以将步骤设置为第 1 步:运行第一个脚本,第 2 步:运行第二个脚本。在代理作业设置中,您可以决定步骤 1 失败时的处理方式。只是让它不运行第 2 步。您也可以将其设置为向您发送电子邮件、跳到另一个步骤、运行其他代码等...如果第一个代码确实失败并显示任何错误消息,您的第二个脚本将不会运行。 -- 如果你真的需要避免工作,你可以在你的第二个脚本中添加一些 if exists 语句,但这会很快变得非常混乱

【讨论】:

创建 SQL 作业将是我最后的手段,因为我试图避免为此使用作业。感谢您的建议。【参考方案3】:

如果两个脚本在不同的文件中

添加将完成和日期记录到表中的语句。更改第二个脚本以首先读取并退出,如果不成功

如果两者在同一个文件中

确保它们在事务中并在第二个脚本开始时读取 @@trancount 并退出,如果小于 1

【讨论】:

【参考方案4】:

SQL Server 2005 的作业调度子系统 SQL Server 代理维护一组日志文件,其中包含有关已运行作业的警告和错误消息,写入 %ProgramFiles%\Microsoft SQL Server\MSSQL.1\MSSQL\LOG目录。 SQL Server 将维护多达九个 SQL Server 代理错误日志文件。当前日志文件名为 SQLAGENT .OUT,而归档文件按顺序编号。您可以使用 SQL Server Management Studio 查看 SQL Server 代理日志。

【讨论】:

以上是关于如何检查 SQL 脚本是不是在 MS SQL Server 中成功执行?的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL巡检系列——检查外键字段是否缺少索引

仅使用脚本在 MS SQL Server 之间移动多个表

MS Sql Server 对象创建/更改脚本

如何通过SQL查询检查列的数值是不是包含字母

存储过程的 MS-SQL 权限

如何使用正确的对象顺序编写 MS SQL Server 数据库脚本?