it-swarm.com.de

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?

17
bernd_k

Wie gesagt, es gibt keinen Weg.

Wir müssen jedoch eine kurze Überprüfung in unseren Skript-Header aufnehmen, um festzustellen, ob der SQLCMD-Modus aktiviert ist (und das Skript 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. Dadurch 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 stellen Sie schwerwiegende Fehler dar. Dies bedeutet, dass die Datenbankmodul-Task, die eine Anweisung oder einen Stapel ausführt, nicht mehr ausgeführt wird. Die Aufgabe zeichnet Informationen über das Geschehene auf und wird dann beendet. In den meisten Fällen wird die Anwendungsverbindung zur Instanz des Datenbankmoduls möglicherweise auch 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.

17
Dan Nolan

Nein.

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.

7
gbn