积极答复者
修改表结构后,如何只刷新相关联的视图?

问题
答案
-
脚本可更新与更改对象有依赖关系的所有视图:
SELECT DISTINCT 'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects so INNER JOIN sys.sql_dependencies sd
ON so.object_id = sd.object_id
WHERE type = 'V'
AND sd.referenced_major_id = object_id('Person.Contact')但是如果VIEW再被其他的View调用这个就查不出来了。
Please Mark As Answer if it is helpful.
- 已标记为答案 zyyjc 2013年6月29日 11:30
-
或許您可以參考MSDN上面有關sp_refreshview這個系統預存程序,其中有段程式碼或許符合你的需求:
【以下轉貼自MSDN】
假設資料表 Person.Person 是以會影響在任何檢視上建立的定義之方式來變更。 下列範例建立了一個指令碼,針對所有對資料表 Person.Person 有相依性的檢視來重新整理中繼資料。USE AdventureWorks2012; GO 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('Person.Person');
以上說明若有錯誤請指教,謝謝。
- 已标记为答案 zyyjc 2013年6月29日 11:30
全部回复
-
脚本可更新与更改对象有依赖关系的所有视图:
SELECT DISTINCT 'EXEC sp_refreshview ''' + name + ''''
FROM sys.objects so INNER JOIN sys.sql_dependencies sd
ON so.object_id = sd.object_id
WHERE type = 'V'
AND sd.referenced_major_id = object_id('Person.Contact')但是如果VIEW再被其他的View调用这个就查不出来了。
Please Mark As Answer if it is helpful.
- 已标记为答案 zyyjc 2013年6月29日 11:30
-
或許您可以參考MSDN上面有關sp_refreshview這個系統預存程序,其中有段程式碼或許符合你的需求:
【以下轉貼自MSDN】
假設資料表 Person.Person 是以會影響在任何檢視上建立的定義之方式來變更。 下列範例建立了一個指令碼,針對所有對資料表 Person.Person 有相依性的檢視來重新整理中繼資料。USE AdventureWorks2012; GO 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('Person.Person');
以上說明若有錯誤請指教,謝謝。
- 已标记为答案 zyyjc 2013年6月29日 11:30