Non puoi aggiungere un trigger a una tabella di sistema, ma puoi creare un trigger DDL che si attiverà sull'istruzione ALTER PROC - esempio:
ALTER TRIGGER DDL_PROC
ON DATABASE
FOR ALTER_PROCEDURE
AS
DECLARE @data XML, @ObjectName sysname, @ParamCount int
SET @data = EVENTDATA()
SET @ObjectName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')
PRINT 'You have changed procedure: ' + @ObjectName
SELECT @ParamCount = COUNT(*) FROM sys.parameters
WHERE object_id = OBJECT_ID(@ObjectName)
RAISERROR('This procedure now has %i parameter(s)',0,0,@ParamCount)
GO
Non sono sicuro di come ottenere l'elenco dei parametri precedente o se è anche possibile - qualcuno lo sa?
Sono d'accordo con il suggerimento di Charles di rendere facoltativi i nuovi parametri, se possibile:il codice esistente non si romperà e dovrai solo trovare i riferimenti se devi aggiungi il parametro alla chiamata.
Lo scripting del database sembra la strada più lunga. Una semplice query come la seguente dovrebbe trovare tutti i riferimenti al tuo proc (all'interno del tuo database):
SELECT so.name, so.type_desc
FROM sys.all_objects so
JOIN sys.all_sql_modules sm ON so.[object_id] = sm.[object_id]
WHERE sm.[definition] LIKE '%<proc name>%'
Questa è la stessa cosa, ma funzionerà anche nelle versioni precedenti di SQL Server:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
Spero che questo aiuti,
MDD