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.
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 dieSET NOEXEC ON
) wird ausgeführt. Der Grund, warum die AnweisungenNOEXEC
vorhanden sind, besteht darin, die Situation abzudecken, in der der ausführende Benutzer nicht übersysadmin
/ 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