U kunt dit niet doen zonder de dynamische SQL omdat een opgeslagen procedure in een eigen batch moet zitten. Daarom kun je niet zeggen:
IF <some condition>
<start a new batch>
De enige manier om dat in dezelfde batch te houden, is door sp_executesql
te gebruiken .
Als je de DROP
. gaat scripten en CREATE
tegelijkertijd, doe het gewoon zonder de controle op het bestaan van het object. Dit geeft je:
DROP PROCEDURE ...;
GO
CREATE PROCEDURE ...;
GO
Wat maakt het uit of de DROP
mislukt? (Dat zou niet moeten, want je hebt er net een script van gemaakt!)
Als u dit script voor een ander systeem dat mogelijk het object hebt, krijgt u een foutmelding voor de DROP
wanneer dat niet het geval is, maar de CREATE
gebeurt nog steeds, dus u kunt de DROP
. negeren fouten. Als je echt wilt, kun je de DROP
handmatig inpakken uitspraken in TRY/CATCH
maar ik denk niet dat het nodig is.
Als je dit voor veel procedures moet doen, of als je het proces echt nodig hebt om geen goedaardige fouten te genereren, raad ik je aan de primitieve scriptopties van Management Studio te verlaten en hiervoor een tool van derden te gebruiken. Ze hebben al veel van de problemen behandeld die u nog niet bent tegengekomen, maar die dat wel zal doen. Ik heb hierover geblogd:
http:// bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/