Sql-Server

SQL Server 2000:不能刪除視圖?

  • February 19, 2014

我有 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。

引用自:https://dba.stackexchange.com/questions/6683