作爲我的集成策略的一部分,我有幾個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