SSMS
 sql >> Base de Dados >  >> Database Tools >> SSMS

Como parar o SSMS 2012 de SPs de script usando sp_executesql


Você não pode fazer isso sem o SQL dinâmico porque um procedimento armazenado precisa estar em seu próprio lote. Portanto, você não pode dizer:
IF <some condition>
  <start a new batch>

A única maneira de manter isso no mesmo lote é usar sp_executesql .

Se você for fazer o script do DROP e CREATE simultaneamente, basta fazê-lo sem a verificação da existência do objeto. Isso lhe dará:
DROP PROCEDURE ...;
GO
CREATE PROCEDURE ...;
GO

Quem se importa se o DROP falha? (Não deveria, porque você acabou de criar um script a partir dele!)

Se você estiver criando um script para outro sistema que pode tiver o objeto, você receberá uma mensagem de erro para o DROP quando não, mas o CREATE ainda acontecerá, então você pode ignorar o DROP erros. Se você realmente quiser, pode envolver manualmente o DROP instruções em TRY/CATCH mas não acho necessário.

Se você precisar fazer isso para muitos procedimentos, ou se você realmente precisar que o processo não gere erros benignos, sugiro que você abandone as opções primitivas de script do Management Studio e use uma ferramenta de terceiros para isso. Eles já terão lidado com muitos dos problemas que você ainda não encontrou, mas o fará. Eu blogei sobre isso:

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