現在、スクリプトの一部がデータベース内のすべてのビューを更新する TSQL スクリプトを作成しています。この例をオンラインで見つけた後、コレクションを繰り返し処理していますが、ビューの 1 つ (最初のものではない) を更新すると奇妙な問題が発生します。
以下のクエリを実行すると、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
ますか、それとも明らかな何かが欠けていますか?