Du kan inte lägga till en utlösare till en systemtabell, men du kan skapa en DDL-utlösare som aktiveras på ALTER PROC-satsen - exempel:
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
Jag är inte säker på hur man får den föregående parameterlistan eller om det ens är möjligt - vet någon?
Jag håller med Charles förslag att göra nya parametrar valfria om möjligt - befintlig kod kommer inte att gå sönder och du behöver bara hitta referenserna om du måste lägg till parametern i anropet.
Att skriva ut databasen verkar vara den långa vägen runt. En enkel fråga som följande bör hitta alla referenser till din proc (inom din databas):
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>%'
Detta är samma sak, men kommer också att fungera i tidigare versioner av SQL-server:
SELECT so.name, so.type
FROM syscomments sc
JOIN sysobjects so ON sc.id = so.id
where text like '%<proc name>%'
Hoppas detta hjälper,
MDD