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

So verhindern Sie, dass SSMS 2012 SPs mithilfe von sp_executesql skriptet

Ohne dynamisches SQL ist dies nicht möglich, da sich eine gespeicherte Prozedur in einem eigenen Batch befinden muss. Daher kann man nicht sagen:

IF <some condition>
  <start a new batch>

Die einzige Möglichkeit, dies im selben Batch zu behalten, ist die Verwendung von sp_executesql .

Wenn Sie den DROP skripten und CREATE gleichzeitig tun Sie es einfach ohne die Prüfung auf Objektexistenz. Das ergibt:

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

Wen interessiert es, ob der DROP scheitert? (Das sollte es nicht, weil Sie gerade daraus geskriptet haben!)

Wenn Sie dies für ein anderes System schreiben, möglicherweise das Objekt haben, erhalten Sie eine Fehlermeldung für den DROP wenn nicht, aber CREATE wird trotzdem passieren, also kannst du den DROP ignorieren Fehler. Wenn Sie wirklich wollen, können Sie den DROP manuell umbrechen Anweisungen in TRY/CATCH aber ich denke nicht, dass es notwendig ist.

Wenn Sie dies für viele Verfahren tun müssen oder wenn Sie den Prozess wirklich benötigen, um keine harmlosen Fehler zu generieren, empfehle ich Ihnen, die primitiven Skriptoptionen von Management Studio aufzugeben und dafür ein Tool eines Drittanbieters zu verwenden. Sie werden sich bereits mit vielen der Probleme befasst haben, auf die Sie noch nicht gestoßen sind, aber sie werden es tun. Ich habe darüber gebloggt:

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