The standard way to check if a procedure exists
if exists( SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type = N'PROCEDURE' and routine_name = @procname) print 'exists'
Starting with MSSQL 2005, you can use [DDL trigger] ( http://msdn.microsoft.com/en-us/library/ms190989(SQL.90%29.aspx) to send email notifications when you drop or create a procedure:
USE msdb GO CREATE TABLE ddl_log (ID int idenity(1,1) PRIMARY KEY CLUSTERED, PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000)); CREATE TRIGGER DDL_Notify ON DATABASE FOR DROP_PROCEDURE, CREATE_PROCEDURE AS DECLARE @data XML, @tableHTML NVARCHAR(MAX) ; SET @data = EVENTDATA() INSERT msdb.dbo.ddl_log (PostTime, DB_User, Event, TSQL) VALUES (GETDATE(), CONVERT(nvarchar(100), USER_NAME()), @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ; SET @tableHTML = N'<H1>DDL Table Event</H1>' + N'<table border="1">' + N'<tr><th>Post Time</th><th>User</th>' + N'<th>TSQL</th><th></tr>' + CAST ( ( SELECT td = PostTime, '', td = DB_User, '', td = TSQL, '' FROM msdb.dbo.ddl_log WHERE id = (select max(id) from msdb.dbo.ddl_log) FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) + N'</table>'; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Default', @recipients = ' dba@youraddress.com ', @subject = 'DDL Table Event', @body = @tableHTML, @body_format = 'HTML'
source share