Sappiamo tutti che lavorando con schemi complessi può risultare difficile (e noioso) stabilire le dipendenze tra i vari oggetti di un database.
SQL Server ci offre nativamente la stored procedure di sistema sp_depends per valutare le dipendendenze ma purtroppo si basa sull'interrogazione della tabella di sistema sysdepends che è risaputo non essere molto affidabile.
Ad esempio se creo una stored procedure basata su un oggetto che non è ancora stato definito nel database la sysdepends non verrà popolata:
USE tempdb
GO
/* Definisco la sp1 */
CREATE PROCEDURE dbo.sp1
AS
EXEC dbo.sp2
GO
/* Output:
Cannot add rows to sysdepends for the current stored procedure because it
depends on the missing object 'dbo.sp2'. The stored procedure will still be
created.
*/
/* Definisco la sp2 */
CREATE PROCEDURE dbo.sp2
AS
SELECT 1 AS [Output]
GO
/* Output:
The command(s) completed successfully.
*/
/* vediamo se la sp1 funziona... */
EXEC dbo.sp1
GO
/* Output:
Output
-----------
1
(1 row(s) affected)
*/
/* OK, la sp1 funziona correttamente
** ma vediamo un po' se ha dipendenze
*/
EXEC sp_depends [dbo.sp1]
GO
/* Output:
Object does not reference any object, and no objects reference it.
*/
/* Male, noi sappiamo che sp1 ha come dipendenza sp2.
** Eliminiamo le due procedure e definiamole nell'ordine corretto
*/
DROP PROCEDURE dbo.sp1, dbo.sp2
GO
/* Definisco la sp2 */
CREATE PROCEDURE dbo.sp2
AS
SELECT 1 AS [Output]
GO
/* Definisco la sp1 */
CREATE PROCEDURE dbo.sp1
AS
EXEC dbo.sp2
GO
/* Riverifichiamo le dipendenze */
EXEC sp_depends [dbo.sp1]
GO
/* Output:
In the current database, the specified object references the following:
name
--------
dbo.sp2
*/
/* Pulizia */
DROP PROCEDURE dbo.sp1, dbo.sp2
GO
Giusto pochi minuti fa ho ricevuto una mail da Kathryn Lye di Red Gate Software che mi invita a partecipare al programma Beta del loro nuovo prodotto:
SQL Dependency Viewer.La prima cosa che mi ha colpito è stato l'impatto grafico: veramente d'effetto!
Inoltre un'altra sorpresa è relativa alla presenza di un engine assolutamente autonomo dalla
sysdepends.
Dopo aver installato il software ho subito eseguito il test riportato poco fa (che bastardo che sono
![](/icons/tounge_smile.gif)
).
Avviando il
SQL Dependency Viewer apparirà la form in
Figura 1 che permette di selezionare l'istanza, la login ed il database che si intenede analizzare:
![](/filestore/415_figura 1.png)
Figura 1
Premendo il bottone OK il software procederà all'analisi delle dipendenze di tutti gli oggetti (Figura 2):
![](/filestore/416_figura 2.png)
Figura 2
Al termine del calcolo (operazione estremamente veloce) apparirà un grafo che visualizza le dipendenze (Figura 3):
![](/filestore/417_figura 3.png)
Figura 3
Come potete notare le dipendenze tra dbo.sp1 e dbo.sp2 risultano corrette anche se la sysdepends non ne tiene traccia!
Vi allego anche il grafo generato per il database Northwind (Figura 4):
![](http://blogs.dotnethell.it/filestore/418_figura%204.png)
Figura 4
Selezionando un oggetto verranno evidenziati in blu gli oggetti che lo referenziano ed in marrone gli oggetti referenziati rendendo estremamente agevole la lettura.
Una funzionalità che secondo me manca è la stampa del grafo con la possibilità di impostare lo stile di impaginazione.
Inoltre sarebbe comodo poter riarrangiare a proprio piacimento la posizione di un oggetto.
Vi ricordo che per eseguire il SQL Dependency Viewer sarà necessaria la presenza del .NET Framework 1.1 e dell'MDAC 2.8.
La Beta è pubblica quindi se lo desiderate potrete contribuire alla valutazione ed alla comunicazione di eventuali bugs a Red Gate inoltrando le vostre segnalazioni al seguente indirizzo di posta: sqlbeta@red-gate.com
Happy Beta