13

我真的很苦恼用管理基于Visual Studio 2010数据库项目的SQL Azure数据库的最佳方法。我认为使用VSDBCMD创建差异脚本进行升级很容易,然后只需在SSMS中针对SQL Azure运行即可。但是,我得到了可怕的“目标数据库模式提供程序无法确定,部署无法继续。”错误。Visual Studio数据库项目和SQL Azure

在这一点上,我只是假设SQL Azure不支持VSDBCMD中的某些东西,反之亦然,我正在寻找其他方法。以下是我目前正在考虑的方法:

  1. 使用Azure数据库引擎设置从SSMS对我的SQL Azure数据库进行脚本编写。
  2. 从脚本在步骤1中创建tempory本地数据库
  3. 使用VSDBCMD从步骤针对本地数据库中创建我的三角洲脚本2.
  4. 评论/从第3步
  5. 从运行脚本修改脚本步骤3/4针对SSMS中的SQL Azure。

好,坏?任何其他想法?

编辑:我今天更新到Visual Studio 2010 SP1,发现Microsoft.Data.Schema.Sql.dll中有一个新的数据库模式提供程序:SqlAzureDatabaseSchemaProvider。但是,我无法确定如何真正使用这个坏男孩。现在,当我尝试同样的VSDBCMD脚本针对Azure数据库,我得到:

源数据库架构提供Sql100DatabaseSchemaProvider无法转换为供应商SqlAzureDatabaseSchemaProvider。部署无法继续。

我也尝试过使用Sql90提供程序,结果相同。我甚至手动编辑了dbproj文件并将DSP属性更改为SqlAzureDatabaseSchemaProvider。当我重新加载项目时,我得到:

数据库模式提供程序必须提供DataGenerationServices的实现。

有没有人试过VS 2010 SP1?

回答

3

您可以使用SQL Azure Migration Wizard并使用它。也许你可以获取脚本并按照你的意愿进行编辑。只是一个想法。

+1

+1这一建议 - 这是一个伟大的工具,可以运行作为用户界面或命令行。 – Stuart 2011-03-24 20:05:05

+1

源代码也可用 - 所以如果你愿意的话,你应该可以适应它的变化。 – Stuart 2011-03-24 20:05:51

1

查看数据库项目的属性页。它应该显示一个包含项目各种可用提供者的下拉菜单。如果您选择Azure提供程序,则应该能够将该项目部署为Azure应用程序的一部分。

+0

我没有看到Azure作为我的数据库项目的选项,我只能看到2005,2008和DAC的项目类型选项。澄清一下,你有DAC项目还是数据库项目?我有一个数据库项目。 – toddkitta 2011-03-24 15:49:28

+0

我问过我的团队中有人,他告诉我VS2001 SP1之前的设置已经存在,但之后消失了。我认为,当您构建Azure应用程序包时,底层引擎会自动确定如何处理数据库项目。 – 2011-04-23 17:12:30

1

一个简单的命令行工具,用于替换无效的SQL Azure的语句是所有需要:

private const string STARTPLACEHOLDER = "AZURESCRIPTSTARTPLACEHOLDER"; 

    public static void Do(string fileName) 
    { 
     // Read the original file 
     StringBuilder script = new StringBuilder(); 
     using (StreamReader reader = new StreamReader(fileName)) 
     { 
      script.Append(reader.ReadToEnd()); 
     } 

     // Remove everything before the start placeholder 
     int startPlaceHolder = script.ToString().IndexOf(STARTPLACEHOLDER, 0); 
     if (startPlaceHolder > 0) 
     { 
      script.Remove(0, startPlaceHolder + STARTPLACEHOLDER.Length); 
     } 

     // Remove WITH clause 
     script.Replace("WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF)", string.Empty); 

     // Create azure compatible output file 
     using (StreamWriter writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + "_Azure" + Path.GetExtension(fileName)))) 
     { 
      writer.Write(script.ToString()); 
     } 
    } 
相关问题