Sql server 如果在SQL Server中使用[database]失败,请停止脚本执行

Sql server 如果在SQL Server中使用[database]失败,请停止脚本执行,sql-server,tsql,error-handling,Sql Server,Tsql,Error Handling,通常,在SQL Server脚本中,我在开始时会有一个USE[database]语句。例如,这适用于模式表创建脚本 脚本假定数据库已经存在。但是,为了防止在主数据库上意外运行脚本,我只希望脚本终止执行 所以错误检查并尝试…catch不起作用 错误检查 USE [MYDATABASE] IF @@ERROR <> 0 BEGIN RAISERROR ('Cannot find database so skipping script creation', 1, 1);

通常,在SQL Server脚本中,我在开始时会有一个USE[database]语句。例如,这适用于模式表创建脚本

脚本假定数据库已经存在。但是,为了防止在主数据库上意外运行脚本,我只希望脚本终止执行

所以错误检查并尝试…catch不起作用

错误检查

USE [MYDATABASE]

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

...

AbortScript:
    PRINT 'Aborted!'

你能抓住这些错误吗?我当前正在使用SQL Server 2008 R2。

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

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]

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

IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'MyTable')
     SET NOEXEC ON
(不要忘了在脚本末尾设置NOEXEC)

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