USE database_name验证

时间:2011-02-15 22:35:26

标签: sql sql-server

尝试创建一个脚本,用于处理自动构建脚本的各种场景的数据库和架构的创建。我遇到的一个问题是评估数据库名称的USE语句(验证数据库存在)。

问题 - 有没有办法解决它?可能是禁用这种评估我的数据库引擎的设置?

谢谢。

3 个答案:

答案 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声明开始的所有内容都应该是动态的。