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

Hur man stoppar SSMS 2012 från att skripta SP:er med sp_executesql

Du kan inte göra detta utan dynamisk SQL eftersom en lagrad procedur måste vara i sin egen batch. Därför kan du inte säga:

IF <some condition>
  <start a new batch>

Det enda sättet att hålla det i samma batch är att använda sp_executesql .

Om du ska skripta DROP och CREATE samtidigt, bara gör det utan kontrollen för objektets existens. Detta ger dig:

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

Vem bryr sig om DROP misslyckas? (Det borde det inte, för du skrev just från det!)

Om du skriptar detta för ett annat system som kan har objektet får du ett felmeddelande för DROP när den inte gör det, men CREATE kommer fortfarande att hända, så du kan ignorera DROP fel. Om du verkligen vill kan du slå in DROP manuellt uttalanden i TRY/CATCH men jag tror inte att det är nödvändigt.

Om du behöver göra detta för många procedurer, eller om du verkligen behöver processen för att inte generera godartade fel, föreslår jag att du överger Management Studios primitiva skriptalternativ och använder ett tredjepartsverktyg för detta. De kommer redan att ha tagit itu med många av de problem du ännu inte har stött på, men kommer att göra det. Jag bloggade om detta:

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



  1. Resultatuppsättningens kolumnbredd i Management Studio

  2. Hur man kör sqlcmd på distans på en maskin som inte har SSMS

  3. Hur vet Management Studio att jag sparar mina T-SQL-kommentarer?

  4. Enkla MySQL-frågor tar lång tid att beräkna