通常在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。
答案 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)