我正在尝试做类似的事情:
“如果存在,则使用它。如果不存在,则创建它。” “如果存在,则删除它。如果不存在,则创建它。”
其中一个绝对令人窒息的地方是 use it 命令 - 因为如果它不存在 - 它就会因 use 命令而窒息,即使该命令不会运行。
这里有更多解释:
我有一个 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开始//////////////////////////////////////////////////////////////////////////////////////)
通过此编辑添加了第三张图片 - 第二张图片显示 if/then/else 语句不起作用。 第三张图显示数据库 CFPT 不在数据库列表中(图像左侧),并且运行了 select 语句(顶部突出显示的代码)以及该选择的结果(底部红色圆圈)
如何让 if/then/else 语句发挥作用? (因为如果条件不利,那么我们可以说 THEN 将不会运行)
(由于某种原因,红色波浪线没有显示 - 它们应该是,但没有 - 嗯)
(编辑1结束////////////////////////////////////////////////////////////////////////////////////)
(编辑2开始//////////////////////////////////////////////////////////////////////////////////////)
关于这个问题 - 尝试隔离通常会失败但不会尝试执行的命令,除非条件恰到好处......(参见下面的第四张图)我正在隔离一些命令使用 IF 语句 (IF 1=2),但即使条件为 false,SQL Server 也会进入该 IF 语句。这是为什么?
(编辑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?
关于sql-server - SSMS 查询 - 如果数据库不存在,脚本将不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276361/