You cannot add a trigger to a system table, but you can create a DDL trigger that will fire on the ALTER PROC statement - example:
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
I'm not sure how to get the previous parameter list or if it's even possible - does anybody know?
I would agree with Charles' suggestion to make new parameters optional if possible - existing code will not break and you only have to find the references if you must add the parameter to the call.
Scripting out the database seems like the long way around. A simple query such as the following should find all references to your proc (within your 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>%'
This is the same thing, but will also work in previous versions of SQL server:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
Hope this helps,
MDD