0
我正在重構遺留系統。它的數據庫有大量的表,其中一些表未被使用。我需要指定這些表以便知道它們是否應該被刪除。 SQL有什麼方法來確定某個表是否被任何可編程對象(即存儲過程,視圖或函數)使用?如何指定數據庫中是否真的使用了特定的表?
我正在重構遺留系統。它的數據庫有大量的表,其中一些表未被使用。我需要指定這些表以便知道它們是否應該被刪除。 SQL有什麼方法來確定某個表是否被任何可編程對象(即存儲過程,視圖或函數)使用?如何指定數據庫中是否真的使用了特定的表?
右鍵單擊表 - >查看依賴
爲每個對象上指定的依賴關係,我用返回的對象類型的select語句:從表,函數,觸發器,過程和視圖我數據庫。
選擇這些對象後,我使用了一個遊標來指定這些對象中每一個的依賴關係。以下是我使用的代碼:
DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR
SELECT name
FROM sys.objects
WHERE (type = 'U') OR (type = 'FN') OR
(type = 'TR') OR (type = 'P') OR
(type = 'V')
DECLARE @dbObjectName varchar(500)
OPEN c
FETCH NEXT FROM c INTO @dbObjectName
WHILE (@@FETCH_STATUS = 0)
BEGIN
print @dbObjectName
EXEC sp_depends @objname = @dbObjectName
FETCH NEXT FROM c INTO @dbObjectName
END
CLOSE c
DEALLOCATE c
聽起來不錯。讓我稍微擴展一下我的問題並詢問:有沒有一種方法可以指定特定數據庫中的任何其他對象都不依賴的所有表? –
不容易....... –
那麼,你可以分享它嗎?我在下面的答案中寫了一個建議的遊標,它可以輸出數據庫中每個表的依賴關係。我試圖讓它更通用。 –