2015-06-25 48 views
1

我們只是試圖在我們的項目中實施SSDT。SSDT實施:修改創建表

對於我們的產品之一,我們有很多客戶端,這些客戶端僅使用表和存儲過程構建在單個數據庫(DBDB)上。

我們爲數據庫DBDB創建了一個SSDT項目(使用VS 2012> SQL Server對象瀏覽器>右鍵單擊項目>新建項目)。

一旦我們構建該項目,它將創建一個.sql文件。

問題:如果我們運行在客戶端的DBDB該文件 - 再次創建所有的表&它刪除它[本滿足要求,但刪除現有的記錄:-(]

所有記錄什麼我們需要:僅中不存在客戶端的新變化DBDB應該得到更新的更新

注意:我們有客戶的DBDB數據庫無法直接訪問與我們最新的比較DBDB。我們只能給他們發送一些神奇的腳本文件,它們會將他們的DBDB更新爲最新狀態。

回答

1

更新客戶端數據庫的唯一方法是比較數據庫模式,然後應用增量。你做的任何方式,你會需要一些方法來得到保持在在客戶端運行的模式,多數民衆贊成:

  1. 如果你們裝運的一個版本的產品,它是最容易的那個版本N-1部署您的開發服務器並將其與您要發佈的版本N進行比較。這樣,SSDT就可以生成遷移到客戶端所需的遷移腳本,以便將該數據庫拉到當前模式。

  2. 如果您沒有版本控制的產品,或者您的客戶端可能已經更改了架構,或者您需要找到一種方法來在站點上提取架構數據(可能使用SSDT),然後讓SSDT創建三角洲。

  3. 選項:您可以跳過使用SSDT的比較功能。但是你需要自己編寫你的遷移腳本。對於模式的每個修改,您都需要自己編寫DDL語句,並將它們包含在檢查舊狀態的if子句中,以便僅在創建舊狀態時才進行一次更改。通過這種方式,從最終狀態到最終狀態並不重要,因爲腳本將確定每一步是否以及如何執行。

最後是最靈活,但需要深刻的測試在它自己的,當然你是在現在的情況,你不知道的變化是什麼了之前應該已經開始方式。但它可以幫助下一次。

這僅適用於表上的模式更改,因爲您可以隨時回退並重新創建所有存儲過程,因爲在刪除它們時不會丟失任何內容。

1

這聽起來像你可能沒有正確推動更改。如果你已經構建了一個SQL項目,你有幾個選項。

  1. 給他們dacpac並讓他們使用SQLPackage來更新他們自己的數據庫。
  2. 根據客戶的「當前」版本生成更新腳本並將其提供給他們。

在任何情況下,聽起來您的發佈選項可能會設置爲每次都刪除並重新創建數據庫。我已經在SSDT SQL項目上寫了不少文章,並且入門可能對您有所幫助:http://schottsql.blogspot.com/2013/10/all-ssdt-articles.html