Не можете да добавите тригер към системна таблица, но можете да създадете 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