Nie możesz dodać wyzwalacza do tabeli systemowej, ale możesz utworzyć wyzwalacz DDL, który będzie uruchamiany na instrukcji ALTER PROC - przykład:
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
Nie jestem pewien, jak uzyskać poprzednią listę parametrów lub czy jest to w ogóle możliwe - czy ktoś wie?
Zgadzam się z sugestią Charlesa, aby nowe parametry uczynić opcjonalnymi, jeśli to możliwe - istniejący kod nie ulegnie zepsuciu i musisz znaleźć referencje tylko wtedy, gdy musisz dodaj parametr do połączenia.
Skryptowanie bazy danych wydaje się długą drogą. Proste zapytanie, takie jak poniższe, powinno znaleźć wszystkie odniesienia do twojego proc (w twojej bazie danych):
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>%'
To samo, ale będzie działać również w poprzednich wersjach serwera SQL:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
Mam nadzieję, że to pomoże,
MDD