如何让SQL Server Management Studio停止处理错误?

时间:2009-05-11 00:01:42

标签: sql-server ssms

这似乎是一个令人难以置信的愚蠢问题,但是如何让SQL Server Management Studio在遇到错误时停止处理SQL脚本?

我有一个很长的脚本,如果在开始时出现错误,SSMS报告它然后盲目地继续,更加搞砸了。我无法使用事务,因为脚本会创建多个数据库,但无法进入事务。数据库创建有时会失败。

SQL Server的Toad将在遇到的第一个错误时暂停,并询问您是要停止还是继续。这是我正在寻找的行为。它是否存在于SSMS中?

询问“我如何编写或修改脚本以便在出错时停止?”我没有兴趣修改我的脚本来实现这一点,我只是希望SSMS 停止出错。用于SQL Server的Toad 正是这样做,这就是我想要的行为。这也不是659188的重复,因为这与修改脚本以停止SSMS有关。

9 个答案:

答案 0 :(得分:10)

简短的回答:你不能。

感谢提供解决方法的那些,但似乎SSMS本身不能像Toad for SQL Server那样设置为暂停或停止错误。

答案 1 :(得分:6)

ApexSQL Script以您想要的方式生成批处理脚本。举个例子:

--Script Header
begin transaction
go

{Statement #1}
go
--Standard Post-Statement Block
if @@error <> 0 or @@trancount = 0 begin
    if @@trancount > 0 rollback transaction
    set noexec on
end
go

{Statement #2}
go
--Standard Post-Statement Block
if @@error <> 0 or @@trancount = 0 begin
    if @@trancount > 0 rollback transaction
    set noexec on
end
go

--Script Footer
if @@trancount > 0 commit transaction
go
set noexec off
go

答案 2 :(得分:5)

考虑使用SQL Server附带的命令行程序'sqlcmd',并设置-b和-V选项。 -b将导致sqlcmd在遇到错误时退出。 -V控制被视为错误的严重性级别。

答案 3 :(得分:4)

您需要将SQL语句包装在 Transaction 中。

BEGIN TRANSACTION
   /* run all your SQL statements */
COMMIT TRANSACTION

如果开始/结束事务中存在错误,则将回滚所有语句。

编辑:在开始/结束事务内部进行包装,将阻止语句被提交到数据库,但不会在此时停止它。您还需要将其包装在try / catch块中,如下所示:

BEGIN TRY
  BEGIN TRANSACTION
  /* run all your SQL statements */
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
END CATCH

答案 4 :(得分:4)

哇。那有点垃圾不是吗?我使用SQL-Workbench,就像Toad for SQL Server一样,可以轻松处理这个问题。与Toad for SQL Server不同,它是免费的。

我很惊讶这些基本功能不是标准工具的一部分。

答案 5 :(得分:2)

会在这里使用try catch块帮助。出错时,将退出try,在catch

中实现错误处理

http://msdn.microsoft.com/en-us/library/ms179296.aspx

答案 6 :(得分:1)

11年后,SSMS仍然没有此功能...

但是!!您可以启用SQLCMD mode(菜单/查询/ SQLCMD模式),然后在文本编辑器中定义此选项:

:ON ERROR EXIT

在您的t-sql脚本之前。现在,它将在出错时停止执行。

答案 7 :(得分:0)

如果您无法将脚本放入存储过程并使用return语句退出时出错,则@Justice提供的解决方案可能是您最好的选择。其他人都错过了这一点 - 即使你使用交易,甚至你也没有反复意见,你也无法从脚本返回。即使设置了xact abort,SSMS也会执行下一个操作。

如果您可以将脚本转换为存储过程,那么您可以在检测到错误时从它返回。

答案 8 :(得分:0)

这里提到了一些更多的解决方法:

SQL Server - stop or break execution of a SQL script

SQL Server: How to abort a series of batches in Query Analyzer?

(raiseerror 20 with log,set noexec on,sqlcmd mode:on error exit,等等)