2010-08-04 44 views
5

我正在使用MS SQL Server數據庫並使用大量視圖(用於O/R映射器)。一個小煩惱是,我想如何在使用模式綁定和更新時經常使用數據庫模式更新

  • 使用架構綁定
  • 更新腳本(部署在服務器上,並把在源代碼控制系統)

,但碰到的問題是每當我想要例如將一列添加到表中,我必須首先刪除引用該表的所有視圖,更新該表,然後重新創建視圖,即使視圖不需要進行其他更新。這使我的更新腳本更長,並且在源代碼控制系統中查看差異,很難看到實際的相關更改是什麼。

有沒有更好的方法來處理這個問題?

我需要仍然能夠使用簡單和源代碼可控的SQL更新。像SQL Server Management Studio中包含的代碼生成器會很有幫助,但是我遇到了SQL Server Management Studio的問題,因爲它傾向於創建不指定某些索引或(默認)約束名稱的代碼。但是當我在不同的系統上運行我的腳本時,我想擁有相同的dbs,包括所有限制條件的名稱等,以便稍後在更新這些約束時不必跳過循環。

因此,一個更聰明的SQL代碼生成器可能會有解決方案嗎?

我現在的工作流程是:「cannot ALTER 'XXX' because it is being referenced by object 'YYY'

  • 類型alter table語句查詢編輯器
  • 檢查,如果我得到這樣一個錯誤的語句
  • 使用SQL Server梟雄工作室腳本我要引用的對象create代碼
  • ALTER語句前插入drop聲明後
  • 檢查創建語句如果drop語句創建錯誤和重複

這使我很煩惱,但也許我只需要忍受它,如果我想繼續使用綱要綁定和腳本更新...

回答

2

您至少可以消除「檢查我是否等錯誤「步驟通過查詢一些動態管理功能和系統視圖來找到您的依賴關係。 This article給出了一個體面的解釋如何做到這一點。除此之外,我認爲你是對的,你不能擁有你的蛋糕,也不能使用架構綁定。

另請注意,刪除/創建視圖會導致您失去在這些對象上授予的任何權限,因此這些權限也應包含在腳本中。

+1

哦,好吧。我想我會忍受它。理想情況下,我希望的是:a)如果表更新沒有真正影響視圖,則不會有錯誤消息(例如,添加新列不應影響此表上的只讀視圖) b)如果表更新斷開視圖(例如,刪除在視圖中使用的列) 但我想MSSQL只是不能這樣工作(可能是出於很好的理由...) 感謝您的權限提醒! – 2010-08-07 17:01:53

相關問題