SSMS
 sql >> Base de données >  >> Database Tools >> SSMS

Comment empêcher SSMS 2012 de scripter les SP à l'aide de sp_executesql

Vous ne pouvez pas faire cela sans le SQL dynamique car une procédure stockée doit être dans son propre lot. Par conséquent, vous ne pouvez pas dire :

IF <some condition>
  <start a new batch>

La seule façon de conserver cela dans le même lot est d'utiliser sp_executesql .

Si vous allez scripter le DROP et CREATE simultanément, faites-le simplement sans vérifier l'existence de l'objet. Cela vous donnera :

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

Qui se soucie si le DROP échoue? (Cela ne devrait pas être le cas, car vous venez de créer un script à partir de celui-ci !)

Si vous écrivez ceci pour un autre système qui pourrait avez l'objet, vous obtiendrez un message d'erreur pour le DROP quand ce n'est pas le cas, mais le CREATE se produira toujours, vous pouvez donc ignorer le DROP les erreurs. Si vous le souhaitez vraiment, vous pouvez envelopper manuellement le DROP instructions dans TRY/CATCH mais je ne pense pas que ce soit nécessaire.

Si vous avez besoin de le faire pour un grand nombre de procédures, ou si vous avez vraiment besoin que le processus ne génère pas d'erreurs bénignes, je vous suggère d'abandonner les options de script primitives de Management Studio et d'utiliser un outil tiers pour cela. Ils auront déjà traité de nombreux problèmes que vous n'avez pas encore rencontrés, mais ils le feront. J'ai blogué à ce sujet :

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