1

我目前正在编写一个 TSQL 脚本,其中部分脚本会刷新数据库中的所有视图。在网上找到这个示例后,我正在遍历集合,但在刷新其中一个视图(不是第一个视图)时遇到了一个奇怪的问题。

在运行以下查询时,我从 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还是我遗漏了一些明显的东西?

4

1 回答 1

2

听起来您在过去的某个时候已经重命名了视图,使用sp_rename或 SSMS 对象资源管理器。当您尝试刷新视图时,sp_refreshview正在尝试使用不再存在的原始视图名称来更改视图。

尝试使用Script View as -> ALTER To -> New Query Editor Window选项生成ALTER VIEW脚本,执行脚本,然后sp_refreshview重试。

于 2013-03-21T13:10:48.350 回答