Kann ich den SQLCMD-Modus in einem Skript aktivieren?

Gibt es so etwas wie eine Direktive, die ich in einem Skript verwenden kann, um SSMS zu zwingen, den SQLCMD-Modus zu aktivieren / deaktivieren?

Antwort

Wie bereits gesagt, gibt es keinen Weg.

Eines haben wir jedoch Führen Sie eine kurze Überprüfung in unseren Skript-Header ein, um festzustellen, ob der SQLCMD-Modus aktiviert ist (und beenden Sie das Skript, wenn nicht):

:setvar DatabaseName "MyDatabase" GO IF ("$(DatabaseName)" = "$" + "(DatabaseName)") RAISERROR ("This script must be run in SQLCMD mode. Disconnecting.", 20, 1) WITH LOG GO -- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors IF @@ERROR != 0 SET NOEXEC ON GO PRINT "You will only see this when SQLCMD mode is on" -- Rest of script goes here GO SET NOEXEC OFF GO 

Es gibt eine Wenn der Schweregrad 20 verwendet wird, wird die Verbindung in der Regel sofort unterbrochen, sodass kein weiterer Skriptcode ausgeführt werden kann, selbst wenn später im Skript GO Batch-Terminatoren vorhanden sind.

Schweregrade 20-24 :

Zeigen Sie Systemprobleme an und sind schwerwiegende Fehler. Dies bedeutet, dass die Datenbankmodul-Task, die eine Anweisung oder einen Stapel ausführt, nicht mehr ausgeführt wird. Die Task zeichnet Informationen darüber auf, was passiert ist, und wird dann beendet. In den meisten Fällen die Anwendungsverbindung zu Die Instanz des Datenbankmoduls kann auch beenden. In diesem Fall hängt dies vom Problem ab em, die Anwendung kann möglicherweise keine erneute Verbindung herstellen.

Fehlermeldungen in diesem Bereich können alle Prozesse betreffen, die auf Daten in derselben Datenbank zugreifen, und können darauf hinweisen, dass eine Datenbank oder ein Objekt beschädigt ist. Fehlermeldungen mit einem Schweregrad von 19 bis 24 werden in das Fehlerprotokoll geschrieben.

Kommentare

  • Für ssms würden die ersten 2 Zeilen ausreichen und für sql 2000 Query Analyzer funktioniert es, aber die Meldung wird nicht angezeigt.
  • Aber ' t the Skript einfach ab dem nächsten GO weiter ausführen?
  • Wie bereits erwähnt hier , können Sie auch SET NOEXEC ON als zusätzliche Sicherheitsmaßnahme, um zu verhindern, dass etwas anderes im Skript ausgeführt wird.
  • @Dan Nolan: Ich verstehe, irgendwie habe ich den Punkt der 3. Zeile verpasst. Wenn ich es richtig verstehe, gibt es ' keine Lösung, um den SQLCMD-Modus auszuschalten. Im Wesentlichen wird incorrect syntax near ':' angezeigt, da am Anfang :setvar
  • @youcantryreachingme RAISERROR Schweregrad 20 (und höher) wird von SQL als schwerwiegender Fehler angesehen, der dazu führt, dass die Verbindung sofort getrennt wird, daher keine weiteren Stapel (nicht einmal die SET NOEXEC ON) wird ausgeführt. Der Grund, warum die Anweisungen NOEXEC vorhanden sind, besteht darin, die Situation abzudecken, in der der ausführende Benutzer nicht über sysadmin / Berechtigungen, die zum Auslösen schwerwiegender Fehler erforderlich sind.

Antwort

Nr.

Sie können jedoch jederzeit im SQLCMD-Modus ausgeführt werden und T-SQL verwenden

Um eine klare Unterscheidung zwischen SQLCMD-Befehlen und Transact-SQL zu treffen, muss allen SQLCMD-Befehlen ein Doppelpunkt (:) vorangestellt werden.

Kommentare

  • Gilt dies noch für SQL Server 2012/2014/2016?
  • @ hot2use: Ja, ich ' habe es 2014/2016

verwendet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.