sql >> Base de Datos >  >> Database Tools >> SSMS

Cómo evitar que SSMS 2012 genere secuencias de comandos de SP mediante sp_executesql

No puede hacer esto sin el SQL dinámico porque un procedimiento almacenado debe estar en su propio lote. Por lo tanto, no puedes decir:

IF <some condition>
  <start a new batch>

La única forma de mantener eso en el mismo lote es usar sp_executesql .

Si va a escribir el DROP y CREATE simultáneamente, simplemente hágalo sin verificar la existencia del objeto. Esto le dará:

DROP PROCEDURE ...;
GO
CREATE PROCEDURE ...;
GO

A quién le importa si el DROP falla? (¡No debería, porque acabas de crear un guión a partir de él!)

Si está programando esto para otro sistema que podría tiene el objeto, obtendrá un mensaje de error para el DROP cuando no es así, pero CREATE todavía sucederá, por lo que puede ignorar el DROP errores Si realmente lo desea, puede envolver manualmente el DROP declaraciones en TRY/CATCH pero no creo que sea necesario.

Si necesita hacer esto para muchos procedimientos, o si realmente necesita que el proceso no genere errores benignos, le sugiero que abandone las opciones de secuencias de comandos primitivas de Management Studio y use una herramienta de terceros para esto. Ya se habrán ocupado de muchos de los problemas que aún no ha enfrentado, pero lo harán. Escribí sobre esto:

http:// bertrandaaron.wordpress.com/2012/04/20/re-blog-el-coste-de-reinventar-la-rueda/