SQL Server ': setvar' Fehler

123

Ich versuche, einige Skriptvariablen in T-SQL wie folgt zu erstellen:

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

Wenn ich dies ausführe, wird jedoch die Fehlermeldung "Falsche Syntax in der Nähe von": "angezeigt. Was mache ich falsch?

Randy Minder
quelle

Antworten:

237

Die: setvar funktioniert nur im SQL-Befehlsmodus, sodass Sie sich möglicherweise innerhalb der normalen SQL-Ausführung im Management Studio befinden und nicht in den Befehlsmodus gewechselt haben.

Dies kann über die Benutzeroberfläche in SQL Server Management Studio erfolgen, indem Sie im Menü "Abfrage" den "SQLCMD-Modus" auswählen.

Andrew
quelle
19
Dies ist auch ein Problem, wenn Sie das Dienstprogramm von Visual Studio verwenden: Daten> Schema-Vergleich. Wenn Sie das resultierende Änderungsskript im Dienstprogramm ausführen, ist dies in Ordnung. Wenn Sie sich jedoch nach einem Vergleich dazu entschließen, das Änderungsskript zu exportieren / zu kopieren und dann zu versuchen, das resultierende Änderungsskript in SSMS zu importieren / einzufügen, schlägt dies wie oben fehl. Dies kann natürlich auch ein Problem sein, wenn Sie das Datenbankänderungsskript in eine gebündelte Bereitstellung aufnehmen. Sie müssen also den SQL-Befehlsmodus aktivieren, bevor Sie das Skript entweder über das oben beschriebene Menü ausführen, oder sicherstellen, dass Ihr benutzerdefiniertes Installationsskript dies tut, bevor es ausgeführt wird.
Risma
6
In Visual Studio (2013): SQL-Menü-> Ausführungseinstellungen-> SQLCMD-Modus
am
Ich habe dieses Problem beim Versuch, ein vom Scema-Vergleich generiertes Skript zu verwenden, um meine Datenbank beim ersten Start nach der Installation aus meiner Anwendung zu erstellen und das Skript an executenonquery () zu übergeben. Ich muss entweder einen Weg finden, dies über den SQLCMD-Modus auszuführen, oder das Skript hacken, um zunächst alle Variablen zu ersetzen.
Scott
Nur zu Ihrer Information - Ich habe das Erstellungsskript verwendet, das beim Veröffentlichen meines DB-Projekts generiert wurde, und dann alle Verweise auf die Variablen entfernt, auf die mit setvar verwiesen wird. Ich habe meinen Datenbanknamen fest codiert, sodass anstelle von CREATE DATABASE [$ DatabaseName] einfach CREATE DATABASE MYDBNAME verwendet wurde. Dieses Skript erstellt jetzt meine Datenbank über executenonquery () während meines ersten Anwendungsstarts nach der Installation.
Scott
10

Aktivieren Sie einfach den SQLcmd-Modus in SQL Server Management Studio, wie in der folgenden Abbildung beschrieben.

Geben Sie hier die Bildbeschreibung ein

Muhammad Awais
quelle
2

FÜR SQL2012:

Gehen Sie zu: tools / options / Query Execution und überprüfen Sie, ob standardmäßig neue Abfragen im SQLCMD-Modus geöffnet werden.

Klicken Sie auf die Schaltfläche Neue Abfrage und stellen Sie sicher, dass die Variablendefinitionen markiert sind. Ihr Skript sollte jetzt korrekt ausgeführt werden.

Vorherige Versionen:

http://blog.sqlauthority.com/2013/06/28/sql-server-how-to-set-variable-and-use-variable-in-sqlcmd-mode/

Terrence Harry Holmes
quelle
Visual Studio meldet auch Syntaxfehler für Ihr Projekt, wenn eine SQL-Datei geöffnet ist, die Folgendes verwendet: setvar. Die hier beschriebene Änderung der Optionen beseitigt die Fehler und vermeidet die "rote, schnörkellose Unterstreichung" in der Anweisung (Sie müssen alle geöffneten SQL-Dateien schließen und erneut öffnen, um den Effekt zu sehen).
BRebey
0

versuchen Sie es zu ersetzen :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

mit:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
quelle
Hilft die Auswertung der Variablen im Rest des Skripts nicht? $ (DatabaseName). [Dbo]. [Was auch immer]
CRice