2009 год, и SQL Server не имеет CREATE OR ALTER/REPLACE. Это то, что я делаю вместо этого.
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'SynchronizeRemoteCatalog'
AND ROUTINE_SCHEMA = 'dbo'
AND ROUTINE_TYPE = 'PROCEDURE')
EXEC ('DROP PROCEDURE dbo.SynchronizeRemoteCatalog')
CREATE PROCEDURE dbo.SynchronizeRemoteCatalog
AS BEGIN
-- body
END
Для триггеров, вы должны опираться на проприетарные системные представления.
Это самая принятая конвенция в то же время?
РЕДАКТИРОВАТЬ: Как n8wrl предложил, официальное слово предполагает, что эта функция не является высоким приоритетом. Отсюда и вопрос.