Часто я хотел бы сделать наоборот, что вы просите. Например, если пользователь настроил процедуру, и я не хочу потерять их изменения, но я хочу применить единый сценарий обновления для всех своих клиентов, я хотел бы сделать что-то вроде следующего:
if not exists (select * from sys.objects
where name='myProc' and objectproperty(object_id,'IsProcedure')=1)
create proc myProc
as begin
-- proc stmts here
end
go
Эта логика позволила бы мне создать что-то только в том случае, если оно НЕ существует, но, к моему большому разочарованию, SQL Server также предотвращает это.
я обойти эту проблему достаточно легко следующим образом:
if not exists (select * from sys.objects
where name='myProc' and objectproperty(object_id,'IsProcedure')=1)
exec('create proc myProc
as begin
-- proc stmts here
declare @object int = 0
end')
go
Передавая команду ргос создать в виде строки и поместить его в ехес заявлении мы обойти глупое правило, которое предотвращает один от делать это в первое место.
«Инструкция GO должна быть на линии сама по себе». Очень важная часть, чтобы заставить это работать. – Nate