Cateva observatii se impun (pentru SQL Server 2000):
[ 1 ] sp_depends 'obj' afiseaza atat obiectele care depind de 'obj' cat si obiectele de care depinde 'obj'
[ 2 ] sp_depends are anumite limite: sunt suportate doar referintele la obiectele din aceeasi baza de date conform "Books online" ("References to objects outside the current database are not reported")
[ 3 ] sp_depends in SQL Server 2000 Standard Edition are un bug: nu afiseaza declansatoarele ("trigger"-ele) conform http://support.microsoft.com/kb/180490
[ 4 ] daca se ruleaza scriptul urmator:
<script>
CREATE DATABASE TestDep
GO
USE TestDep
GO
CREATE TABLE Factura (
IDFactura INT IDENTITY(1,1) PRIMARY KEY ,
Serie VARCHAR(10) NOT NULL ,
Nr INT NOT NULL,
Data DATETIME NOT NULL
)
GO
CREATE UNIQUE INDEX Idx_Factura_1 ON Factura (Serie,Nr)
GO
CREATE TABLE ProdusFacturat (
IDProdusFacturat INT IDENTITY(1,1) PRIMARY KEY ,
IDFactura INT NOT NULL,
IDProdus INT NOT NULL,
Cant FLOAT NOT NULL
)
GO
ALTER TABLE ProdusFacturat
ADD CONSTRAINT Restrictie_Produsfacturat_1
FOREIGN KEY (IDFactura) REFERENCES Factura(IDFactura) ON DELETE CASCADE
GO
CREATE PROCEDURE sp_Factura
@id INT
AS
SELECT *
FROM Factura F
INNER JOIN ProdusFacturat PF ON F.IDFactura = PF.IDFactura
WHERE F.IDFactura = @id
GO
</script>
atunci la executia procedurii stocate
EXEC sp_depends 'Factura' --sql2000
este afisata o singura inregistrare:
dbo.sp_Factura stored procedure !
Acelasi comportament poate fi observat si in sql2005 (cel putin la versiunea Express).
Problema in acest exemplu este ca sp_depends nu afiseaza pentru apelul
EXEC sp_depends 'Factura' --sql2000
si tabela "de legatura" ProdusFacturat (de care Factura este legata astfel: cheia externa
ProdusFacturat.IDfactura -> cheia primara Factura.IDFactura).
Plus ca in Enterprise Manager (sql2000) in lista dependetelor pentru 'Factura' vor fi afisate si tabela 'ProdusFacturat' cat si procedura stocata 'sp_Factura' (asa cum ar fi corect).
[ 5 ] se poate utiliza procedura sp_MSdependencies pentru eliminarea acestui inconvenient:
EXEC sp_MSdependencies N'dbo.ProdusFacturat', null, 1315327 --obiecte care depind de ProdusFacturat
EXEC sp_MSdependencies N'dbo.ProdusFacturat', null, 1053183 --obiecte de care depinde ProdusFacturat
EXEC sp_MSdependencies N'dbo.Factura', null, 1315327 --obiecte care depind de Factura
EXEC sp_MSdependencies N'dbo.Factura', null, 1053183 --obiecte de care depinde Factura
Referinte sp_MSdependencies: http://www.mssqltips.com/tip.asp?tip=1294
[ 6 ] Poti studia codul sursa al procedurilor sp_depends , sp_MSdependencies si codul sursa generat de Enterprise Manager atunci cand afiseaza dependinţele: http://www.mssqltips.com/tipimages/1294_sqlcode.txt
plus poti analiza informatiile referitoare la tabelele (ex. sysdepends & co) sistem din master & co lecturând systbl.chm (download systbl.chm) .
De asemenea, poti folosi SQL Profiler pentru a vizualiza comenzile SQL executate de SQL Server in momentul in care in Enterprise Manager selectezi pentru tabela 'ProdusFacturat' (de exemplu) optiunea All tasks > Display dependencies (in SQL profiler trebuie selectate clasele de evenimente "TSQL" si "Stored procedurs" .
Posibile probleme cu sp_MSDependencies: http://support.microsoft.com/kb/308888
[ 7 ] daca doresti ceva specific (ex. doar dependinţele (aici putem vorbi si despre dependenţe funcţionale ... :-)) dintre cheiele externe si cheile primare sau toti utilizatorii asignati unei baze de date sau ...) atunci ar trebui sa detaliezi / reformulezi problema
[ 8 ] pentru a obtine informatii detaliate despre dependintele obiectelor poti folosi
SQL Dependency Tracker (referinta http://www.red-gate.com/products/SQL_Dependency_Tracker/video.htm)
care este mult mai flexibil decat procedurile stocate predefinite ale SQL Server si optiunile din Enterprise Manager.
... etc ...