作为我的集成策略的一部分,我有几个SQL脚本运行以更新数据库。这些脚本所做的第一件事是检查他们是否需要运行,例如:如何在SQL Server中有条件地创建存储过程?
if @version <> @expects
begin
declare @error varchar(100);
set @error = 'Invalid version. Your version is ' + convert(varchar, @version) + '. This script expects version ' + convert(varchar, @expects) + '.';
raiserror(@error, 10, 1);
end
else
begin
...sql statements here...
end
很好用!除非我需要添加存储过程。 “create proc”命令必须是一批sql命令中唯一的命令。在我的IF语句中添加“创建过程”会导致此错误:
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
哎唷!如何将CREATE PROC命令放入我的脚本中,并只在需要时才执行?
每次重新创建过程(有条件地下降)是一个更好的解决方案。如果使用exec,你什么也得不到,并且有缺点;您的proc必须转义字符串,并且错误中的任何行号都将引用与exec命令相关的行号。 – Peter 2008-09-12 07:20:29
+1能够处理除存在以外的条件(在我的情况下@@版本驱动是否创建某些特效) – cmsjr 2009-06-24 17:16:28
+1 - 我用它来配置我的CRUD生成器以创建一个存根过程,如果它尚未存在,然后_改变它。这使我可以修改我存储的特效,构建CRUD,但是_保留为现有的procs_分配的任何权限。 – 2010-07-09 19:49:31