Sql server 如果在SQL Server中使用[database]失败,请停止脚本执行
通常,在SQL Server脚本中,我在开始时会有一个USE[database]语句。例如,这适用于模式表创建脚本 脚本假定数据库已经存在。但是,为了防止在主数据库上意外运行脚本,我只希望脚本终止执行 所以错误检查并尝试…catch不起作用 错误检查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);
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