Gibt es so etwas wie eine Direktive, die ich in einem Skript verwenden kann, um SSMS zu zwingen, den SQLCMD-Modus zu aktivieren / deaktivieren?
quelle
Gibt es so etwas wie eine Direktive, die ich in einem Skript verwenden kann, um SSMS zu zwingen, den SQLCMD-Modus zu aktivieren / deaktivieren?
Wie gesagt, es gibt keinen Weg.
Eine Sache, die wir tun, ist jedoch, eine schnelle Überprüfung in unseren Skript-Header aufzunehmen, um festzustellen, ob der SQLCMD-Modus aktiviert ist (und das Skript zu beenden, 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 not see this unless SQLCMD mode is on'
-- Rest of script goes here
GO
SET NOEXEC OFF
GO
Es gibt einen Grund, warum der Schweregrad 20 verwendet wird. Die Verbindung wird in der Regel sofort GO
abgebrochen , sodass kein Skriptcode mehr ausgeführt werden kann, selbst wenn das Skript später Stapelabschlusszeichen enthält.
Hinweis auf Systemprobleme und schwerwiegende Fehler. Dies bedeutet, dass die Datenbankmodul-Task, die eine Anweisung oder einen Stapel ausführt, nicht mehr ausgeführt wird. Die Aufgabe zeichnet Informationen darüber auf, was aufgetreten ist, und wird dann beendet. In den meisten Fällen wird die Anwendungsverbindung zur Instanz des Datenbankmoduls möglicherweise ebenfalls beendet . In diesem Fall kann die Anwendung je nach Problem möglicherweise keine Verbindung mehr herstellen.
Fehlermeldungen in diesem Bereich können sich auf alle Prozesse auswirken, 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.
SET NOEXEC ON
als zusätzliche Sicherheitsmaßnahme festlegen , dass nichts anderes im Skript ausgeführt wird.Nein.
Sie können jedoch immer im SQLCMD-Modus ausgeführt werden und T-SQL verwenden
quelle