sql >> Database teknologi >  >> Database Tools >> SSMS

Sådan stopper SSMS 2012 fra scripting af SP'er ved hjælp af sp_executesql

Du kan ikke gøre dette uden den dynamiske SQL, fordi en lagret procedure skal være i sin egen batch. Derfor kan du ikke sige:

IF <some condition>
  <start a new batch>

Den eneste måde at holde det i samme batch er at bruge sp_executesql .

Hvis du vil scripte DROP og CREATE samtidigt, bare gør det uden kontrol for objektets eksistens. Dette vil give dig:

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

Hvem bekymrer sig om DROP fejler? (Det burde den ikke, for du har lige skrevet et script ud fra det!)

Hvis du scripter dette til et andet system, måske har objektet, får du en fejlmeddelelse for DROP når den ikke gør det, men CREATE vil stadig ske, så du kan ignorere DROP fejl. Hvis du virkelig vil, kan du manuelt indpakke DROP udsagn i TRY/CATCH men jeg tror ikke det er nødvendigt.

Hvis du har brug for at gøre dette for mange procedurer, eller hvis du virkelig har brug for processen for ikke at generere godartede fejl, foreslår jeg, at du opgiver Management Studios primitive scripting muligheder og bruger et 3. parts værktøj til dette. De vil allerede have behandlet mange af de problemer, du endnu ikke er stødt på, men vil. Jeg bloggede om dette:

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



  1. DELETE FROM-sætning virker ikke

  2. phpMyAdmin vil ikke lade mig logge på - ingen fejl vises

  3. Installation af phpMyAdmin med Nginx på CentOS 8

  4. Import af databaser og tabeller med PhpMyAdmin