SSMS查询 - 如果数据库不存在,脚本将无法运行

时间:2016-09-01 16:13:17

标签: sql-server syntax

我尝试做类似的事情:

"如果存在,请使用它。如果没有,请创建它。" "如果存在,请将其删除。如果没有,请创建它。"

它确实令人窒息的一个地方是使用它命令 - 因为如果它不存在 - 它会在使用命令上窒息,即使该命令不会运行。

以下是更多解释:

我有一个SQL Server脚本,我在其中创建数据库然后使用数据库。

脚本无法运行

  • 因为use database命令无效
  • 因为数据库不存在
  • 但在第一个命令执行后它将存在
  • 但它并不重要,因为它现在不存在,所以脚本不会运行。

如何在那里放置试图使用可能不存在的数据库的代码?

如何将代码放在那里,如果直接运行会导致错误,但除非条件合适,否则不会运行。

请参阅附件图片。

以下是代码,因此您无需输入代码......

-- SQL SERVER: We can't run this script because CFPT does not exist.
-- ME: But it WILL exist after the first command runs
-- SQL SERVER: That does not matter - at THIS point in the code... it does not exist... tough luck



-- CREATE THE DATABASE
create database CFPT

-- USE THE DATABASE
USE CFPT

use master
drop database CFPT 

第二段代码:

-- SQL SERVER: We can't run this script because CFPT does not exist.
select db_id('CFPT') -- this just lets us see what the IF statement is going to have to deal with

IF db_id('CFPT') is null 
    begin
        print 'DESIRED DB DOES NOT EXIST' 
        return
    end
else
    begin
        use CFPT -- this line of code makes the whole script just not run.
    end;

    -- doesn't want to work - chokes on the use databasename (when the database does not exist)

(编辑1开始/////////////////////////////////////////// /////////////////////////////////////////)

此次修改添加了第三张图片 - SECOND图片显示if / then / else语句不起作用。 第3张图像显示数据库CFPT不在数据库列表中(图像的左侧)并且运行了select语句(顶部高亮的代码)并且该选择的结果(底部红色圆圈)< / p>

如何让if / then / else语句生效? (因为如果条件不利,那么THEN将不会运行 - 我们会说)

(由于某种原因,红色波浪线没有出现 - 它们应该是,但它们不是 - 嗯 -

(编辑1结束/////////////////////////////////////////// /////////////////////////////////////////)

(编辑2开始/////////////////////////////////////////// /////////////////////////////////////////)

关于这个问题 - 尝试隔离通常会失败但不会尝试执行的命令,除非条件恰到好处.....(见下面第4张图片)我隔离一些带有IF语句的命令(IF 1 = 2),但即使条件为假,SQL Server也会进入该IF语句。为什么?

(编辑2结束/////////////////////////////////////////// /////////////////////////////////////////)

enter image description here

enter image description here

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

试试这个......

-- CREATE THE DATABASE
create database CFPT
GO
-- USE THE DATABASE
USE CFPT

use master
drop database CFPT 

GO命令是一个批处理终止符,它将命令分离,以便从使用它的命令创建数据库。

请参阅https://msdn.microsoft.com/en-us/library/ms188037.aspx

What is the use of GO in SQL Server Management Studio & Transact SQL?