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

Tal*_*Guy 28 sql-server ssms

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

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

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

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

Tal*_*Guy 11

简答:你做不到.

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


Rus*_* K. 7

11年后SSMS仍然没有这个功能......

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

:ON ERROR EXIT
Run Code Online (Sandbox Code Playgroud)

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


yfe*_*lum 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
Run Code Online (Sandbox Code Playgroud)


Phi*_*nis 6

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


Jos*_*lio 5

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

BEGIN TRANSACTION
   /* run all your SQL statements */
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

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

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

BEGIN TRY
  BEGIN TRANSACTION
  /* run all your SQL statements */
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
END CATCH
Run Code Online (Sandbox Code Playgroud)

  • 在 `try/catch` 的情况下,你不能使用 `GO`。 (5认同)