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()); 
     } 
    } 
相關問題