Como parte de mi estrategia de integración, tengo algunos scripts SQL que se ejecutan para actualizar la base de datos. La primera cosa que todos estos scripts hacer es comprobar para ver si necesitan para funcionar, por ejemplo .:¿Cómo creo condicionalmente un procedimiento almacenado en 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
funciona muy bien! Excepto si necesito agregar un procedimiento almacenado. El comando "create proc" debe ser el único comando en un lote de comandos sql. Poner una "Crear proc" en mi instrucción IF provoca este error:
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
Ay! ¿Cómo coloco el comando CREATE PROC en mi script, y solo lo ejecuto si es necesario?
Volver a crear los procesos cada vez (condicionalmente soltar) es una solución mucho mejor.Si usa Exec, no gana nada y hay desventajas; su proc tiene que escapar de las cadenas y cualquier número de línea en los errores se referirá al número de línea relativo al comando exec. – Peter
+1 por ser capaz de manejar condiciones distintas a la existencia (en mi caso @@ La versión maneja si se crean o no ciertos procesos) – cmsjr
+1 - Usé esto para configurar mi generador CRUD para crear un procedimiento de código auxiliar si no lo hizo existir, y _then_ alterarlo. Esto me permite modificar mis procesos almacenados, crear el CRUD pero _preservar los permisos asignados contra los procesos existentes_. –