2010-09-01 55 views
1

我最近將MSSQL2000 DB複製到MSSQL2008 DB。之後,我運行腳本將表中的所有文本/ varchar字段更新爲與模型db相同的排序規則。但是,我所有的複製視圖仍然使用與前一個數據庫相同的排序規則。我發現解決這個問題的最簡單的方法是讓MS SQL Management Studio爲這些視圖創建腳本文件的DROP/CREATE。但是,某些視圖依賴於其他視圖,因此您需要確保以正確的順序排列這些視圖。如何使用SMO刪除並重新創建數據庫中的所有視圖?

所以我的問題是:

我將如何創建一個遍歷,深度優先,每個視圖的依賴關係,然後回程下降,並創建每個視圖腳本?

我假設這將使用SMO。我將用C#編寫腳本。

回答

1

你能不能迭代並動態執行sp_refreshview?這將實現相同的結果:更新新基表定義的視圖。

您沒有使用WITH SCHEMABINDING(否則無法更改表),因此依賴性或深度無關緊要。

0

在這種情況下,只需要運行一段腳本(SSMS f5),最終所有的子視圖都會在它們被父項使用時存在。你可以知道什麼時候一切都很好,因爲不會有錯誤。

+0

問題在於,我們可能必須針對生產服務器運行此操作,並且我不認爲DBA會喜歡這種心態。 – 2010-09-01 19:58:23

+0

我很驚訝DBA不抱怨嵌套視圖!如果他們抱怨,我會問他們他們的解決方案是什麼。 – 2010-09-01 20:02:22

0

嘗試DBSourceTools。 http://dbsourcetools.codeplex.com
此實用程序使用SMO將所有數據庫對象和數據寫入磁盤(使用DROP/CREATE)腳本。
它還會自動構建一個依賴性樹並按照所需順序重新創建數據庫對象。
將您的2000數據庫腳本化到磁盤後,爲您的2008數據庫創建一個「部署目標」數據庫。
然後,您可以創建一整套修補程序來更改/升級/重命名所有視圖。
DBSourceTools將爲您重新構建數據庫,然後按順序應用所有修補程序。
這是一種可靠的,可重複的數據庫版本控制方法,允許您測試和版本控制這些補丁。
當您準備好發佈時,只需將所有補丁發送給您的DBA,並讓他按順序運行它們。 玩得開心。

相關問題