it-swarm.com.de

Warum ist: r der Befehl SQLCMD im Post-Deployment-Skript als falsch markiert?

Ich habe ein paar Mal mit Skripten nach der Bereitstellung gearbeitet und immer intuitiv die Build-Aktion "PostDeploy" verwendet, weil es so ist. Jetzt versuche ich zum ersten Mal, der integrierten Anweisung aus der Skriptvorlage zu folgen, um die Syntax ":r somescript.sql" Zu verwenden.

Sofort wird diese Zeile als falsch markiert:

"SQL80001 falsche Syntax neben ':'"

Ich habe Vorschläge gefunden, um die PDS auf Build Action "none" zu setzen. Dies hilft nicht, der Fehler bleibt bestehen. Was fehlt mir hier?

21
Magier

Angenommen, der Fehler tritt während des Erstellungsprozesses auf und Sie haben keine tatsächlichen Syntaxfehler, und es ist einfach

:r path\to\file.sql

der Fehler tritt dann auch auf, wenn die zu importierende Datei nicht vorhanden ist. Bitte überprüfen Sie den Speicherort der Datei. Wenn Sie keinen absoluten Pfad angegeben haben, ist der Pfad relativ zum Lösungsordner (zumindest für mich).

Wenn Sie während der Entwicklung den Fehler sehen möchten, den der Erstellungsprozess meldet, müssen Sie den "SQLCMD-Modus" im T-SQL-Editor in Visual Studio aktivieren. Ganz rechts in der Schaltflächenleiste befindet sich eine Schaltfläche mit einem "!" darin sollte das ermöglichen. Oder gehen Sie zum Menü SQL , wählen Sie Transact-SQL Editor ->, wählen Sie Ausführungseinstellungen ->, dann wählen Sie schließlich SQLCMD-Modus. Wenn Sie das Skript ausführen, wird :r Genau wie beim Erstellen/Veröffentlichen korrekt interpretiert.

Außerdem muss für Ihr Post Deploy-Skript (PDS) Build Action auf PostDeploy gesetzt sein. Wenn es auf None gesetzt ist, wird es vom SSDT-Erstellungsprozess vollständig übersprungen.

18
Solomon Rutzky

Gültiger Fehler

Das ist weil :r somescript.sql ist nicht gültig SQL. Sie sehen einen Syntaxfehler, genau wie in der Fehlermeldung angegeben.

SQL80001: Falsche Syntax in der Nähe von ':'.

SQLCMD-Modus

Das Skript nach der Bereitstellung wird im SQLCMD-Modus ausgeführt.

Mit dem Dienstprogramm sqlcmd können Sie Transact-SQL-Anweisungen, Systemprozeduren und Skriptdateien über den Befehl Eingabeaufforderung, im Abfrageeditor im SQLCMD-Modus, in einer Windows-Skriptdatei oder in einem Jobschritt eines Betriebssystems (Cmd.exe) eines SQL Servers eingeben Agent Job. Dieses Dienstprogramm verwendet ODBC, um Transact-SQL-Stapel auszuführen.

Auflösung

Denken Sie daran, dass Sie eine Verbindung zu einer Datenbank herstellen und SQL in Visual Studio ausführen können. Sie würden denselben Syntaxfehler sehen, wenn Sie dasselbe Skript in SSMS öffnen würden. Sowohl in SSMS als auch in Visual Studio können Sie jedoch den SQLCMD-Modus "aktivieren".

VS 2017

  • klicken Sie mit der rechten Maustaste auf den Editor, der das SQL-Skript enthält
  • klicken Sie auf Ausführungseinstellungen
  • klicken Sie auf SQLCMD-Modus
  • Beachten Sie, dass Sie dasselbe über das SQL-Menü tun können

SSMS 17, SSMS 18

  • Abfrage (Menüpunkt)
  • SQLCMD-Modus

Siehe auch

6
Seth Flowers