Mentre spulciavo i post sul ng MVP privato dedicato a SQL Server, ho notato un thread di
Erland Sommarskog dedicato alla stored procedure
sp_refreshsqlmodule che verrà introdotta con il Service Pack 2 di SQL Server 2005 (attualmente è disponibile la
CTP di Novembre 2006).
In passato mi è già capitato di parlare dei problemi legati all'aggiornamento della tabella di sistema
sysdepends di SQL Server 2000 contenente le informazioni di dipendenza tra gli oggetti.
In SQL Server 2005 queste informazioni ci vengono restituite dalla catalog view
sys.sql_dependencies che accede alle tabelle di sistema sys.sysmultiobjrefs e sys.syspalvalues (non documentate). Fino ad ora l'unica soluzione per popolare correttamente tali tabelle consisteva nel rigenerare i moduli nella giusta sequenza ma l'introduzione della stored procedure
sp_refreshsqlmodule ci permetterà di "rinfrescare" il loro contenuto.
Vi allego l'esempio postato da
Erland:
CREATE PROCEDURE nisse_sp
AS
SELECT * FROM doesnotyetexist
GO
CREATE TABLE doesnotyetexist
(
nowitexists int NOT NULL
);
GO
EXEC sp_depends nisse_sp; -- nothing displayed.
GO
EXEC sp_refreshsqlmodule nisse_sp;
GO
EXEC sp_depends nisse_sp; -- Now it does!
GO
DROP PROC nisse_sp;
DROP TABLE doesnotyetexist;
Sarei curioso di studiare il codice sorgente della procedura, ma su questo PC non ho una istanza SQL Server 2005.
Chi ha installato la CTP del Service Pack 2 potrà sperimentare in prima persona il suo funzionamento