2013-03-21 80 views
1

我目前正在寫一個劇本TSQL在腳本的一部分刷新所有的數據庫中的意見。發現網上this例子後,我迭代通過集合,但清爽的意見(不是第一個)之一,當得到一個奇怪的問題。sp_refreshview拋出意外錯誤

在運行下面的查詢我得到的結果從sysobjects表背

SELECT * FROM sysobjects WHERE type = 'V' AND name = 'vwEnginesFinishBuiltToday' 

enter image description here

然後運行刷新我得到一個異常回

exec sp_refreshview N'dbo.vwEnginesFinishBuiltToday' 

enter image description here

現在奇怪的事情錯誤是告訴我一個不同名字的視圖無法找到。其真正的,它並沒有在這麼認爲dbo.vwEnginesFinishBuiltToday使用另一種觀點數據庫中存在內部我看着視圖的TSQL。

SELECT  COUNT(dbo.tblBatches.IdBatch) AS TotalEnginesFinishedToday 
FROM   dbo.tblBatches INNER JOIN 
         dbo.tblEngines ON dbo.tblBatches.IdBatch = dbo.tblEngines.idBatch 
WHERE  (YEAR(dbo.tblEngines.DateFinished) = YEAR(GETDATE())) AND (MONTH(dbo.tblEngines.DateFinished) = MONTH(GETDATE())) AND (DAY(dbo.tblEngines.DateFinished) 
         = DAY(GETDATE())) 

嗯,沒有提到dbo.vwEnginesFinishedToday在那裏。不,我正在努力尋找問題。

SQL Server中的sp_refreshsqlmodule_internal方法存在問題還是缺少明顯的東西?

+0

您以前是否使用['sp_rename'](http://msdn.microsoft.com/zh-cn/library/ms188351.aspx)更改了視圖的名稱? – 2013-03-21 12:59:57

+0

怕它不是我的數據庫。我不知道以前的開發者改變了什麼。 – 2013-03-21 13:08:11

回答

2

這聽起來像你已經更名的看法在過去的某個時間,或者使用sp_rename或SSMS對象資源管理器。當您嘗試刷新視圖時,sp_refreshview正嘗試使用不再存在的原始視圖名稱來更改視圖。

嘗試使用Script View as -> ALTER To -> New Query Editor Window選項生成ALTER VIEW腳本,執行該腳本,然後再次嘗試sp_refreshview

+0

貌似這就是問題所在。我生成並運行了Alter View腳本,現在可以使用sp_refreshview命令。很奇怪的問題。謝謝你的幫助 – 2013-03-21 13:24:00