2009-08-17 30 views

回答

5

如果一個視圖是模式綁定的,這意味着底層模式不能改變。它實際上阻止它這樣做。

模式綁定還允許您索引視圖。應用索引時可以看到靜態模式的重要性。

請記住,模式綁定只能發生在數據庫中 - 您不能將模式綁定到另一個數據庫或其他服務器。這完全是出於數據完整性原因 - 您並不總是保證能夠訪問該數據庫或服務器,因此,您無法阻止對該模式進行任何和所有更改。

此外,您不能刪除模式綁定的表。這顯然會弄糟它的模式,因此被阻止。

雖然我一直在說,「模式」,我的意思是表的設計。這包括列及其數據類型。您不能將模式綁定表上的列從int更改爲bigint。您也不能將列名從id更改爲tblID。這種預防只是爲了維護觀點的完整性。

1

您不能索引不是模式綁定的視圖。

模式綁定視圖是模式依賴鏈的一部分。

您不能刪除或更改由模式綁定視圖引用的表,但可以在普通視圖上執行此操作(只會引用運行時錯誤)。

1

有上的int Microsoft® SQL Server ® 2012 T-SQL Fundamentals通過伊茨克奔甘WITH SCHEMABINDING選項很好的解釋,並在Exam 70-461: Querying Microsoft SQL Server 2012由德揚沙爾卡,伊茨克奔甘,和更多的作家。

舉個例子,當你嘗試刪除從使用WITH SCHEMABINDING選項創建的對象的對象或列:

使用WITH SCHEMABINDING選項創建一個簡單的觀點,不是試圖改變它例如:

ALTER TABLE Table DROP COLUMN Column1; 

您會收到以下錯誤:

消息5074,級別16,狀態1,行 對象 'SomeObject' 是依賴於列 '列1'。 消息4922,級別16,狀態9,行1 ALTER TABLE DROP COLUMN列1失敗,因爲一個或多個對象訪問此列。

如果您有一個沒有SCHEMABINDING選項的視圖,這個更改將被允許,但是如果您使用刪除的對象或列查詢一個對象,它可能會在運行時導致錯誤。

SCHEMABINDING選項也有一些首選項,因爲它不支持SELECT *語法,所以您必須使用限定名稱(兩個名稱約定)。

希望這會有所幫助