这似乎是一个令人难以置信的愚蠢问题,但是如何让SQL Server Management Studio在遇到错误时停止处理SQL脚本?
我有一个很长的脚本,如果在开始SSMS报告时出现错误,然后盲目地继续,搞砸了更多的东西.我无法使用事务,因为脚本会创建多个数据库,但无法进入事务.数据库创建有时会失败.
SQL Server的Toad将在遇到的第一个错误时暂停,并询问您是要停止还是继续.这是我正在寻找的行为.SSMS中是否存在?
我不是问,"我如何编写或修改脚本,以便它在错误时停止?" 我没有兴趣修改我的脚本来实现这一点,我只是希望SSMS 停止出错.SQL Server的Toad 正是这样做的,这就是我想要的行为.这也不是659188的副本,因为这与修改脚本以停止SSMS有关.
11年后SSMS仍然没有这个功能......
但!您可以启用SQLCMD mode(菜单/查询/SQLCMD 模式),然后在文本编辑器中您可以定义此选项:
:ON ERROR EXIT
Run Code Online (Sandbox Code Playgroud)
在你的 t-sql 脚本之前。现在它将在出错时停止执行。
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)
您需要将 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)
| 归档时间: |
|
| 查看次数: |
18583 次 |
| 最近记录: |