尝试创建一个脚本,用于处理自动构建脚本的各种场景的数据库和架构的创建。我遇到的一个问题是评估数据库名称的USE语句(验证数据库存在)。
问题 - 有没有办法解决它?可能是禁用这种评估我的数据库引擎的设置?
谢谢。
答案 0 :(得分:1)
为什么不检查数据库是否已经存在?
IF EXISTS(SELECT name from sys.databases where name='DatabaseName')
SELECT 1
ELSE
SELECT 0
答案 1 :(得分:1)
将USE
语句放在自己的批处理中 - 在数据库存在之前不会对其进行解析。
IF NOT EXISTS(SELECT * from sys.databases where name='dbname')
begin
create database dbname --any other options needed here
end
GO
use dbname
GO
--now you can carry on in the dbname database
答案 2 :(得分:0)
在运行脚本之前检查数据库名称,这可以通过这个小而幼稚的脚本轻松显示:
SELECT 'test?'
IF DB_ID('new_db') IS NULL BEGIN
CREATE DATABASE new_db;
USE new_db;
/* the rest of automated build follows */
END;
永远不会执行初始SELECT,而是生成以下非严肃消息:
Msg 911,Level 16,State 1,Line 4
数据库'new_db'不存在。确保正确输入名称。我应该一直提醒你吗?
那么,疑问句实际上并没有出现在消息中,但重点是,错误不能被截获。
到目前为止,除了使用动态查询之外,我还没有找到其他解决方法。并且您无法仅仅使用EXECUTE('USE dbname')
,因为这只会在动态查询的上下文中选择数据库,而不会影响您的“真实”查询。因此,从USE声明开始的所有内容都应该是动态的。