SQL: Sprawdzanie czy tabela jest wykorzystywana w widokach, funkcjach lub procedurach

25-Lis-2018

Od czasu do czasu administrator lub programista musi nieco posprzątać w swojej bazie danych. Sprzątanie może polegać na usunięciu tabel, które nie są już potrzebne, w których kiedyś ktoś planował przechowywać jakieś dane, ale się rozmyślił i zostają osierocone, nieużywane tabele. Wykonanie polecenia DROP jest proste, szybkie i przyjemne, ale przed usuwaniem warto sprawdzić, czy tabela nie jest wykorzystywana w widokach, procedurach i funkcjach.

Jeżeli inne obiekty były tworzone z wykorzystaniem opcji with SCHEMA_BINDING, to zadanie jest proste, bo sama próba usunięcia obiektu, do którego odwołują się inne obiekty skończy się błędem. Gorzej jeśli ta opcja nie była wykorzystywana, ale i tak masz na to rozwiązanie.

Oto przykład jaki rozważymy:

use tempdb
go
 
create table myTab (id int)
go
 
create view myView as select id from myTab
go
 
create procedure myProcedure as select id from myTab
go
 
create function myFunction() returns table return select id from myTab
go

żeby sprawdzić, czy istnieją obiekty odwołujące się do MyTab wykonaj zapytanie:

SELECT object_name(referencing_id), * FROM sys.sql_expression_dependencies 
WHERE referenced_id = OBJECT_ID(N'dbo.myTab')
go

Oto wynik:

taki test można też wykonać z GUI w SSMS. Kliknij na tabeli prawym przyciskiem myszy i z menu wybierz „View dependecies”:

 

Dodaj komentarz:

Autor: Rafał Kraik