如果USE [数据库]在SQL Server中失败,则停止脚本执行

时间:2014-10-07 11:07:27

标签: sql-server tsql error-handling

通常在SQL Server脚本中,我将在开始时使用USE [database]语句。例如,这将用于Schema Table创建脚本。

该脚本假设数据库已存在。但是,为防止意外地对主数据库运行脚本,我只希望脚本终止执行。

因此错误检查和尝试... catch不起作用。

错误检查

USE [MYDATABASE]

IF @@ERROR <> 0
BEGIN
    RAISERROR ('Cannot find database so skipping script creation', 1, 1);
    GOTO AbortScript
END

...

AbortScript:
    PRINT 'Aborted!'

尝试抓住

BEGIN TRY
    USE [MYDATABASE]
    PRINT 'xxxx'
END TRY
BEGIN CATCH

    PRINT 'OOps Errored'

END CATCH

你能捕获这些错误吗?我目前正在使用SQL Server 2008 R2。

2 个答案:

答案 0 :(得分:1)

首先检查数据库是否存在:

IF (NOT EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = 'mydatabase')) 
BEGIN
    RAISERROR ('Cannot find database so skipping script creation', 1, 1);
    GOTO AbortScript
END;

USE [MYDATABASE]

答案 1 :(得分:0)

我一直试图中止包含许多批处理(标记为“ GO”)的大型SQL脚本。不幸的是,您不能使用GOTO块,IF块或TRY-CATCH跳过多个批处理,但是可以关闭命令执行,效果相同。

IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'MyTable')
     SET NOEXEC ON

(请不要忘记在脚本结尾处将NOEXEC设置为OFF)

Detailed reference here