SSMS
 sql >> Database >  >> Database Tools >> SSMS

Come interrompere SSMS 2012 dallo scripting SP utilizzando sp_executesql

Non puoi farlo senza l'SQL dinamico perché una procedura memorizzata deve trovarsi nel proprio batch. Quindi non puoi dire:

IF <some condition>
  <start a new batch>

L'unico modo per mantenerlo nello stesso batch è usare sp_executesql .

Se hai intenzione di creare uno script di DROP e CREATE contemporaneamente, fallo senza il controllo dell'esistenza dell'oggetto. Questo ti darà:

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

Chi se ne frega se il DROP non riesce? (Non dovrebbe, perché hai appena creato uno script da esso!)

Se stai eseguendo lo script per un altro sistema che potrebbe hai l'oggetto, riceverai un messaggio di errore per il DROP quando non lo fa, ma il CREATE accadrà comunque, quindi puoi ignorare il DROP errori. Se vuoi davvero puoi avvolgere manualmente il DROP istruzioni in TRY/CATCH ma non credo sia necessario.

Se è necessario eseguire questa operazione per molte procedure o se è davvero necessario che il processo non generi errori benigni, suggerisco di abbandonare le opzioni di scripting primitivo di Management Studio e di utilizzare uno strumento di terze parti per questo. Avranno già affrontato molti dei problemi che non hai ancora incontrato, ma lo faranno. Ho bloggato su questo:

http:// bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/