2012-11-03 60 views
2

如果我有這樣的一個表MyTableSQL Server:當基礎表數據類型更改時,視圖列數據類型不會更改?

Value1 decimal 

然後,我有一個觀點MyView

Select SUM(Value1) as SumValue1 from MyTable 

當我看着視圖的列數據類型SSMS下的視圖的列部分是小數點。現在

如果我修改表:

Value1 real 

如果我刷新視圖的列一節中SSMS的數據類型仍然是一個小數。現在,如果我打開視圖並重新保存它,數據類型將成爲一個浮點數。

這是它應該如何?看起來這個視圖在我重新保存之前不會改變。

+3

如果您對基礎表進行更改,則需要刷新視圖:'exec sp_refreshview'MyView',以使其定義再次更新。這確實是預期的行爲。請參見[sp_refreshview上的MSDN文檔](http://msdn.microsoft.com/zh-cn/library/ms187821.aspx)。 –

回答

5

是的,這是預期的。表格可以按照使視圖completely invalid的方式進行更改。如果您想防止發生這種情況,您可以在創建視圖時使用WITH SCHEMABINDING選項。從鏈接的文章:

將視圖綁定到一個或多個基礎表的模式。指定SCHEMABINDING時,不能以影響視圖定義的方式修改基表或多個表。必須先修改或刪除視圖定義本身,以刪除要修改的表上的依賴關係。