我目前正在编写一个TSQL脚本,其中部分脚本刷新数据库中的所有视图。在网上找到this示例后,我正在迭代整个集合,但在刷新其中一个视图(不是第一个)时遇到一个奇怪的问题。
在运行以下查询时,我从sysobjects表中得到一个结果
SELECT * FROM sysobjects WHERE type = 'V' AND name = 'vwEnginesFinishBuiltToday'
然后运行刷新我得到一个异常回来
exec sp_refreshview N'dbo.vwEnginesFinishBuiltToday'
现在奇怪的是错误告诉我找不到具有不同名称的视图。确实它在数据库中不存在,因此认为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 :(得分:2)
听起来您在过去的某个时刻重命名了视图,使用sp_rename
或SSMS对象资源管理器。当您尝试刷新视图时,sp_refreshview
正在尝试使用原始视图名称(不再存在)来更改视图。
尝试使用Script View as -> ALTER To -> New Query Editor Window
选项生成ALTER VIEW
脚本,执行脚本,然后再次尝试sp_refreshview
。