我尝试做类似的事情:
"如果存在,请使用它。如果没有,请创建它。" "如果存在,请将其删除。如果没有,请创建它。"
它确实令人窒息的一个地方是使用它命令 - 因为如果它不存在 - 它会在使用命令上窒息,即使该命令不会运行。
以下是更多解释:
我有一个SQL Server脚本,我在其中创建数据库然后使用数据库。
脚本无法运行
如何在那里放置试图使用可能不存在的数据库的代码?
如何将代码放在那里,如果直接运行会导致错误,但除非条件合适,否则不会运行。
请参阅附件图片。
以下是代码,因此您无需输入代码......
-- 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结束/////////////////////////////////////////// /////////////////////////////////////////)
答案 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?