Если добавить к сообщению Радж, нет способа сделать "upsert" с хранимыми процедурами.Оператор Создать процедуру должен быть первым оператором пакета.Таким образом, следующее не будет работать:
If Not Exists(Select 1 From sys.procedures Where Name = 'getType')
Create Procedure...
Else
Alter Procedure...
Единственный способ «обновить» процедуру и не дать ей выдать ошибку, если она уже существует, - это удалить ее и повторносоздайте его.
ADDITION
Чтобы ответить на конкретный вопрос, заданный вами в комментариях, sys.objects - это представление каталога, которое содержит список всех объектов (таблиц, ограничений)., столбцы, индексы и т. д. Каждая «вещь» в базе данных), какие процедуры являются одной из них.Таким образом, это проверяет, существует ли объект процедуры (на основе фильтров по типу).Первичным ключом таблицы / представления sys.objects является object_id, который является целым числом.В вашем примере они используют функцию OBJECT_ID
, чтобы найти идентификатор объекта getType
и определить, является ли это процедурой.(Вероятно, было бы безопасно просто использовать If OBJECT_ID(N'getType') is not null
, но на всякий случай есть другой объект с таким именем, который не является процедурой, они добавили проверку типа объекта).