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

17

Ich habe ein paar Mal mit Post-Deployment-Skripten gearbeitet und immer intuitiv die Build-Aktion "PostDeploy" verwendet, denn das ist es, was es ist. Jetzt versuche ich zum ersten Mal, die eingebaute Anweisung aus der Skriptvorlage zu befolgen, um die ":r somescript.sql"Syntax zu verwenden.

Diese Zeile wird sofort als falsch markiert:

"SQL80001 falsche Syntax neben ':'"

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

Magier
quelle
Entschuldigung, ich denke klarer zu sein. "Welche Aktion ist das Skript, das das": r "enthält?" :)
Ed Elliott

Antworten:

14

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 auch dann auf, wenn die zu importierende Datei nicht existiert. 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 im T-SQL-Editor von Visual Studio den "SQLCMD-Modus" aktivieren. Ganz rechts in der Schaltflächenleiste befindet sich eine Schaltfläche mit einem "!" darin sollte das ermöglichen. Sie können auch zum SQL- Menü wechseln , Transact-SQL Editor -> auswählen, Ausführungseinstellungen -> auswählen und schließlich den SQLCMD-Modus auswählen . Wenn Sie das Skript jetzt ausführen, wird es korrekt interpretiert :r, genau wie der Build / Publish-Prozess.

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

Solomon Rutzky
quelle
4

Gültiger Fehler

Dies liegt daran :r somescript.sql, dass SQL nicht gültig ist. Es wird ein Syntaxfehler angezeigt, der in der Fehlermeldung genau angegeben ist.

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

SQLCMD-Modus

Das Post-Deployment-Skript wird im SQLCMD-Modus ausgeführt.

Mit dem Dienstprogramm sqlcmd können Sie Transact-SQL-Anweisungen, Systemprozeduren und Skriptdateien an der Eingabeaufforderung im Abfrage-Editor im SQLCMD-Modus, in einer Windows-Skriptdatei oder in einem Betriebssystemjobschritt (Cmd.exe) eines SQL Servers eingeben Agent Job. Dieses Dienstprogramm verwendet ODBC zum Ausführen von Transact-SQL-Batches.

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ü ausführen können

SSMS 17, SSMS 18

  • Abfrage (Menüpunkt)
  • SQLCMD-Modus

Siehe auch

Seth Blumen
quelle