Как часть моей стратегии интеграции, у меня есть несколько сценариев 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. Ввод «create proc» в моей инструкции IF вызывает эту ошибку:
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
Ouch! Как поместить команду CREATE PROC в мой скрипт и выполнить ее только в том случае, если это необходимо?
Повторное создание procs каждый раз (условно снижается) является гораздо лучшим решением.Если вы используете exec, вы ничего не получаете и есть недостатки; ваш proc должен избегать строк, а любые номера строк в ошибках будут ссылаться на номер строки относительно команды exec. – Peter 2008-09-12 07:20:29
+1 для того, чтобы справляться с условиями, отличными от существования (в моем случае @@ Version использует ли определенные procs или нет) – cmsjr 2009-06-24 17:16:28
+1 - Я использовал это, чтобы настроить генератор CRUD для создания процедуры заглушки, если он еще не был существуют, а затем меняют его. Это позволяет мне изменить мои сохраненные procs, построить CRUD, но _preserve любые разрешения, назначенные против существующего procs_. – 2010-07-09 19:49:31