1

現在、スクリプトの一部がデータベース内のすべてのビューを更新する 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ますか、それとも明らかな何かが欠けていますか?

4

1 に答える 1

2

sp_renameSSMS オブジェクト エクスプローラーを使用して、過去のある時点でビューの名前を変更したようです。ビューを更新しよsp_refreshviewうとすると、存在しない元のビュー名を使用してビューを変更しようとしています。

Script View as -> ALTER To -> New Query Editor Windowオプションを使用してスクリプトを生成し、ALTER VIEWスクリプトを実行してから、もう一度sp_refreshviewやり直してください。

于 2013-03-21T13:10:48.350 に答える