Вы не можете добавить триггер в системную таблицу, но вы можете создать DDL-триггер, который будет запускаться в операторе ALTER PROC - пример:
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
Я не уверен, как получить предыдущий список параметров или, если это вообще возможно, кто-нибудь знает?
Я бы согласился с предложением Чарльза сделать новые параметры необязательными, если это возможно - существующий код не сломается, и вам нужно будет найти ссылки, только если вы должны добавить параметр в вызов.
Создание сценариев для базы данных кажется долгим процессом. Простой запрос, такой как следующий, должен найти все ссылки на ваш процесс (в вашей базе данных):
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>%'
Это то же самое, но также будет работать в предыдущих версиях SQL-сервера:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
Надеюсь, это поможет,
MDD