2014-01-30 85 views
2

客戶的數據庫已從Oracle轉換爲MS Sql。之後,幾個視圖被刪除(不再需要它們)。不過,我現在有時得到的消息如何告訴sp_refreshsqlmodule不刷新視圖

找不到對象「sysadm.someview」,或者您沒有權限

該消息由存儲PROG sys.sp_refreshsqlmodule生產。當我再次添加「someview」視圖時,它會給出同樣的錯誤,但會出現另一個視圖。

所以我猜測這個SP仍然試圖刷新前一段時間被刪除的視圖。而不是再次添加這些視圖,是否有辦法告訴SP不要再次刷新這些視圖?

或者,如果我重新添加所有視圖,是否有辦法以乾淨的方式刪除它們,以便SP知道?

謝謝!

+0

更多的信息:我檢查了sys.views和視圖不在那裏。 – WebStakker

+1

很有可能你有一些* other * SQL模塊(最有可能的存儲過程)是指'sysadm.someview'和'sp_refreshsqlmodule'因此失敗,因爲它找不到被引用的視圖。 – RBarryYoung

+0

放棄視圖後,proc不會失效嗎?據我所知,這是Oracle的標準行爲。 – abhi

回答

1

您必須有一些代碼正在觸發​​。這個SP不只是出去嘗試刷新所有視圖。根據文檔,它只會刷新指定的對象。

「更新爲指定非架構綁定存儲過程,用戶定義的函數,查看,DML觸發器,數據庫級DDL觸發,或在當前的數據庫服務器級DDL觸發器。持久性的元數據的元數據對於這些對象,例如參數的數據類型,由於對其基礎對象的更改可能會過時。「

這裏有完整的文檔。 http://technet.microsoft.com/en-us/library/bb326754.aspx

+0

很酷,我會在下週四檢查一下,當我再次回到客戶那裏。 – WebStakker

+0

看看這個http://stackoverflow.com/questions/5079457/how-do-i-find-a-stored-procedure-containing-text。您可以使用該問題的答案來查找可能從中調用'sp_refreshsqlmodule'的所有存儲過程。 – 2014-02-04 17:50:33

+0

對不起,我完全忘記了這個問題還沒有解決。事實證明,確實還有其他人仍在呼籲刷新。謝謝!!! – WebStakker