2012-11-30 22 views
1

我們已經使用Visual Studio數據庫項目一段時間了,它們對於部署非常有用。我們已經開始將不同環境下的數據庫當前狀態捕獲爲dbschemas或dacpac文件,以便我們可以在其他數據庫項目中引用它們,因此我們可以在沒有生產訪問權限的情況下查看生產模式的狀態。導入dbschema或dacpac忽略所有錯誤

通常我想從源代碼控制中獲取dbschema或dacpac,並在本地sql server上創建該模式,但由於用戶存在於一個環境而不是本地環境中,因此幾乎總是有錯誤。如果我忽略用戶對象類型,如果還有其他引用用戶的東西(如模式),我仍會收到錯誤。

我見過建議創建一個服務器項目來處理這種情況,但我不想爲此創建任何自定義任務,因爲我的任務是爲我們的開發人員創建一個通用工具。我希望能夠採取任何dbschema或dacpac並以「盡力而爲」的方式導入它。

我知道這在大多數情況下是危險的,但在我的本地數據庫中,我幾乎從不關心數據丟失或其他嚴重錯誤。我只想快速獲取本地實例上的dbschema中的有效對象。

回答

0

我知道你正在處理的確切問題。在VS2010中,當你使用dbschema文件時,我不相信除了創建一個服務器項目(如你所說)之外,還有什麼辦法可以做到這一點。但是,您可以進行模式比較,並選擇不比較用戶/登錄,我相信。

我一直在使用2012 SSDT上我的最新項目,並沒有意識到這個錯誤消失,直到我讀你的問題。當我導入一個現有的數據庫時,看起來用戶沒有被導入。因此,當我發佈該項目時,它不會部署任何用戶。有趣的是,如果您進行模式比較,則可以選擇比較用戶並進行部署。但是,如果通過項目發佈(我假設使用SqlProject.exe進行發佈),即使您在目標中檢查到項目中不存在的拖放對象,也不會觸及用戶。

然後我的建議是升級到最新版本的數據庫項目(可用於2010和2012),不要在項目中包含用戶並使用SqlPackage.exe進行發佈。

希望這是有幫助的, 馬克

+0

什麼讓我解決這個的平均時間是消除來自告訴SQLCMD退出的錯誤生成的腳本行。然後,腳本繼續創建我需要的所有對象,以便在用戶不存在時忽略錯誤。 –