我将所有的T-SQL DDL语句存储在版本控制下的Visual Studio数据库项目中。这些脚本是为了始终运行没有错误,所以他们包括降/创建语法像这样:复制场景中SQL Server存储过程的CREATE/ALTER语法?
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
麻烦的是,我们已经搬到了复制方案,所以我可以不再使用我滴/创建语法因为您不能删除标记为复制的对象。现在我需要创建proc,如果它不存在,或者修改它,如果它存在。而且我无法反转我的IF
逻辑,因为我无法在IF
声明中创建proc - 我只能删除它。有任何想法吗?
编辑: 由于亚当的答案,这里是我结束了使用。不知道为什么我不考虑执行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
哦,我的天啊。我必须要完全的大脑冻结才能执行SQL语句。谢谢。 – mattmc3 2011-02-14 15:25:12