Я храню все свои операторы DDL T-SQL в проекте базы данных Visual Studio под управлением версией. Сценарии должны всегда выполняться без ошибок, поэтому они включают синтаксис удаления / создания, например:
use MyDatabase
go
if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') = 1 begin
drop procedure dbo.MyProcName as
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
create procedure dbo.MyProcName as
--...
go
Проблема в том, что мы перешли к сценарию репликации, поэтому я больше не могу использовать мой синтаксис удаления / создания, поскольку вы не можете удалить объекты, отмеченные для репликации. Теперь мне нужно создать процедуру, если она не существует, или изменить ее, если она существует. И я не могу изменить свою IF
логику, потому что я не могу создать процесс в операторе IF
- я могу только удалить его. Есть идеи?
EDIT:
Благодаря ответу Адама, вот что я в итоге использовал. Не знаю, почему я не подумал о выполнении строки SQL ... надо пить больше кофе.
use MyDatabase
go
if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') is null begin
exec('create proc dbo.MyProcName as')
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
alter procedure dbo.MyProcName as
--...
go