SQL Server 2005,Win7,VS2008。我必须将数据库从旧版本的产品升级到新版本。我想有一个脚本创建新数据库并将旧数据库升级到新状态。我正在尝试执行以下操作(下面的SQL脚本)并获取错误(在没有数据库的机器上运行时):
数据库'MyDatabase'不存在。确保名称是 输入正确。
问题是:
SQL代码:
USE [master]
-- DB upgrade part
if exists (select name from sysdatabases where name = 'MyDatabase')
BEGIN
IF (<Some checks that DB is new>)
BEGIN
raiserror('MyDatabase database already exists and no upgrade required', 20, -1) with log
END
ELSE
BEGIN
USE [MyDatabase]
-- create some new tables
-- alter existing tables
raiserror('MyDatabase database upgraded successfully', 20, -1) with log
END
END
-- DB creating part
CREATE DATABASE [MyDatabase];
-- create new tables
答案 0 :(得分:0)
您通常不希望在脚本中显式指定数据库名称。相反,提供exernally或预处理SQL以用实际数据库的名称替换$$DATABASENAME$$
标记。
答案 1 :(得分:0)
您无法在脚本中包含USE [MyDatabase]
,因为如果数据库不存在,查询将无法解析。
相反,您可以做的是保留2个单独的脚本,一个用于升级,另一个用于新数据库。然后,您可以通过xp_cmdshell和动态SQL调用IF分支中的脚本。以下链接包含一些您可以遵循的示例:
http://abhijitmore.wordpress.com/2011/06/21/how-to-execute-sql-using-t-sql/
PowerShell也可以让这项工作变得更轻松,但我没有使用它的任何直接经验。