2012年4月17日 星期二

SQL SERVER VIEW DEPENDENT

利用以下的 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 失敗, 因為有一個或多個物件存取這個資料行 。

沒有留言:

張貼留言