SQL Server 2000:不能刪除視圖?
我有 SQL Server 2000。我想通過刪除過時和未使用的對象來清理它。其中一種觀點導致我出現錯誤。我試圖提供更多資訊,但我仍然不知道原因是什麼。
背景:我發現可以刪除一個視圖,並且我確定沒有人使用它。它連結到分離(未使用)數據庫。我決定放棄它。在我放下之前,我檢查了視圖以確保。
CREATE View vw_obsolete_view AS SELECT [very long], , , ... FROM [unused_database].dbo.vw_obsolete_view DROP VIEW vw_obsolete_view
現在,View 被刪除了。好像沒問題。但是,我接到使用者的電話,說應用程序 (ADP) 收到一條錯誤消息。它指出視圖 vw_obsolete_view 失去。
因為這個視圖不是我的編碼,我的應用程序只呼叫我的對象。所以我不知道為什麼這會導致錯誤。我花了一個小時才弄清楚。我檢查所有依賴對象。根本沒有任何東西與此視圖相關聯。我檢查了所有 ADP VBA 程式碼。也與此觀點無關。
我找不到這有什麼問題。但我知道問題出在刪除視圖上,因為我是唯一一個更改數據庫的人。所以我創建了一個同名的新視圖。
CREATE View vw_obsolete_view AS SELECT 1 AS total
最終使用者的錯誤消失了。最終使用者很高興,但我仍然無法刪除視圖。我還是沒有頭緒。
旁注:我現在無法升級 SQL Server。
執行SQL Profiler以辨識誰、在哪裡等。您有各種列,其中包含主機名、ntusername 等,可讓您查看使用情況。
例如:是否只有一位客戶或使用者注意到?他們是否執行不同的 ADP?
視圖呼叫也可以作為該表單的 RecordSource 或作為某些控制項的源嵌入到某些 Form 屬性中。它可能不在 VBA 中。您必須編寫一些 VBA 來遍歷表單、控制項和報告測試各種屬性。
除了使用標準(預設)模板 + TextData 列上的過濾器執行 SQL Server Profiler 跟踪之外,您還可以嘗試檢查視圖是否是數據庫內部任何其他對象的依賴項:
-- not always up to date: EXEC sp_depends 'vw_obsolete_view' -- undocumented: EXEC sp_MSdependencies 'vw_obsolete_view' -- just SPs and functions: SELECT routine_name, routine_type FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%vw_obsolete_view%' -- syscomments can contain multiple lines per object, so the following is prone to error: select * from syscomments sc join sysobjects so on so.id = sc.id where sc.text like '%vw_obsolete_view%'
即使它是從數據庫內部使用的,它也可能被用於上述搜尋中未顯示的一些動態 SQL 片語,因此最好的選擇仍然是 SQL Server Profiler。