首页 > 解决方案 > 是否有相当于返回的 SQL?

问题描述

考虑以下 SQL

    SET DATEFORMAT ymd
SET ARITHABORT, ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, NOCOUNT ON
SET NUMERIC_ROUNDABORT, IMPLICIT_TRANSACTIONS, XACT_ABORT OFF
GO
USE master
GO

IF DB_NAME() <> N'master' SET NOEXEC ON

--
-- Create database [myDatabaseName]
--
PRINT (N'Create database [myDatabaseName]')
GO
CREATE DATABASE myDatabaseName

然后有一个很长的脚本来设置表、视图、存储过程等。

我想知道 SQL 是否允许以下​​伪代码之类的东西;

If (myDatabaseName Exists)
     Return  // in other word abort the script here but don't throw an error
Else
 //Carry on and install the database

我知道 SQL 中的 Exists 函数,但我似乎找不到任何可以直接中止脚本剩余部分的东西。

该脚本将在安装例程中结束。从理论上讲,它永远不应该在数据库已经存在的安装程序中,但是我不希望冒险并为潜在的错误做好适当的准备。脚本不会抛出任何错误也很重要,因为这只会导致安装程序回滚并且什么都不安装。

我希望 SQL 中存在一些东西,如果满足特定条件,它就会干净地退出脚本。退出我的意思是退出,而不是简单地打破当前正在评估的条件。

标签: sqlsql-server-2017-express

解决方案


您可以按如下方式使用 GOTO:

If (myDatabaseName Exists)
     GOTO QUIT;  // in other word abort the script here but don't throw an error
Else
 //Carry on and install the database

QUIT:
  SELECT 0;

推荐阅读