利用以下的 SQL 可以查出 那些 view depend on Table
select distinct 'EXEC sp_refreshview ''' + name + ''''
from sys.objects AS so
inner join sys.sql_expression_dependencies AS sed
on so.object_id = sed.referencing_id
where so.type = 'V'
and sed.referenced_id = OBJECT_ID ( 'Foo')
如果未以 SCHEMABINDING 子句來建立檢視
當影響檢視定義的檢視之下的物件有變更時
就應該執行 sp_refreshview
否則,在查詢檢視時,
可能會產生非預期的結果
或是利用 SCHEMABINDING 將 VIEW 與 對應的物件緊緊黏起來
注意: 需要加上表格來源的敘述為 dbo.foo
alter view v_view3 with schemabinding as
select ID , name , x from dbo.foo
當要移去 x column 時
alter table foo drop column x
系統就會產生對應的錯誤警告
訊息 5074 ,層級 16 ,狀態 1 ,行 1
物件 'v_view3' 與 資料行 'x' 相依 。
訊息 4922 ,層級 16 ,狀態 9 ,行 1
ALTER TABLE DROP COLUMN x 失敗, 因為有一個或多個物件存取這個資料行 。
沒有留言:
張貼留言