SQL Server客户端数据库升级脚本出现问题

时间:2011-07-25 14:34:25

标签: sql sql-server sql-server-2008 upgrade

SQL Server 2005,Win7,VS2008。我必须将数据库从旧版本的产品升级到新版本。我想有一个脚本创建新数据库并将旧数据库升级到新状态。我正在尝试执行以下操作(下面的SQL脚本)并获取错误(在没有数据库的机器上运行时):

  

数据库'MyDatabase'不存在。确保名称是   输入正确。

问题是:

  1. 如何在升级部分
  2. 中指定数据库名称
  3. 编写创建/升级的更好方法是否存在?
  4. 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
    

2 个答案:

答案 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也可以让这项工作变得更轻松,但我没有使用它的任何直接经验。