資料庫檢視詳解 (轉)

iSQlServer發表於2010-09-06

執行檢視:

保護檢視:

with check option導致檢視where自居不但篩選檢索的資料,還在通過檢視插入和更新資料時進行檢查。即進行雙向限制。

在建立檢視的時候,如果在management stdio設計器中進行建立,如果在屬性視窗中啟用了with schemabinding(繫結到架構)選項。那麼我們在修改表的結構的時候,系統就會提示無法修改,系統就會保護檢視

我們所建立的檢視的程式碼都可以再系統表中找到:儲存在SysComments中

eg:select Text from SysComments

join SysObjects on SysObjects.ID=SysComments.ID

where Name='ViewName'

即可得到ViewName的原始碼

但是如果我們在建立檢視的時候加上了with encryption的話,就無法得到原始碼 ,而是一堆亂碼

不過值得注意的是,如果加了這個限制之後,我們就無法修改這個檢視了。

 

通過檢視進行更新:

人們經常抱怨,不能通過檢視來更新資料。事實上,除非檢視包含的是簡單的select語句,否則不能通過它來實現資料的更新

下列因素將導致檢視不可更新:

1.只能更新一個表。如果檢視使用了連線,引用檢視的update語句只能跟新其中的一個表

2.針對檢視或基表的instead of觸發器將改變資料修改操作,在這種情況下,將執行instead of觸發器中的程式碼,而不執行提交的資料更新

3.如果試圖包含聚合函式或group by子句,檢視將是不可更新的,因為sql server無法確定應更新那些被彙總的行

4.如果檢視使用自查詢來提供派生表,檢視輸出將不包含該派生表中的任何列。然而可以再用作派生表的子查詢中使用聚合函式

5.如果試圖包含with check option,則insert和update操作必須滿足檢視的where子句指定的條件

6.執行insert或update操作時,指定的列必須在基表中是唯一的。如果兩個表包含名稱相同的列,必須指定列時使用table.column表示法

交叉參考:一種規避檢視不可更新限制的方法是建立一個instead of觸發器,它檢查要更新的資料,並根據這些資料執行合法的update操作

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-672789/,如需轉載,請註明出處,否則將追究法律責任。

相關文章