Perché: r Il comando SQLCMD è contrassegnato come errato in Post Deployment Script?


17

Ho lavorato un paio di volte con gli script di post-distribuzione e ho sempre usato intuitivamente l'azione di compilazione "PostDeploy", perché è quello che è. Ora per la prima volta provo a seguire le istruzioni integrate dal modello dello script per usare la ":r somescript.sql"sintassi.

Immediatamente questa riga viene contrassegnata come errata:

"SQL80001 sintassi errata accanto a ':'"

Ho trovato suggerimenti per impostare il PDS su Build Action "none". Questo non aiuta, l'errore rimane. Cosa mi sto perdendo qui?


scusate immagino di essere più chiaro "a quale azione è impostato lo script che contiene": r "al suo interno?" :)
Ed Elliott,

Risposte:


15

Supponendo che l'errore si verifichi durante il processo di compilazione e che non si verifichino errori di sintassi effettivi, ed è un semplice

:r path\to\file.sql

quindi l'errore si verifica anche quando il file da importare non esiste. Controlla la posizione del file. Se non hai fornito un percorso assoluto, il percorso sarà relativo alla cartella della soluzione (almeno per me lo è).

Se, durante lo sviluppo, vuoi vedere l'errore segnalato dal processo di compilazione, assicurati di abilitare la "modalità SQLCMD" nell'editor T-SQL in Visual Studio. C'è un pulsante all'estrema destra nella barra dei pulsanti con un "!" in esso che dovrebbe consentire questo. Oppure puoi andare al menu SQL , selezionare Transact-SQL Editor -> , selezionare Impostazioni di esecuzione -> , quindi infine selezionare la modalità SQLCMD . Ora quando esegui lo script, questo lo interpreterà correttamente :r, proprio come fa il processo di compilazione / pubblicazione.

Inoltre, Post Deploy Script (PDS) deve avere l' azione di costruzione impostata su PostDeploy . Se è impostato su Nessuno , verrà ignorato completamente dal processo di compilazione SSDT.


4

Errore valido

Questo perché :r somescript.sqlsql non è valido. Stai vedendo un errore di sintassi, che è esattamente ciò che afferma il messaggio di errore.

SQL80001: sintassi errata vicino a ':'.

Modalità SQLCMD

Lo script di post-distribuzione viene eseguito in modalità SQLCMD.

L'utilità sqlcmd consente di inserire istruzioni Transact-SQL, procedure di sistema e file di script al prompt dei comandi, in Query Editor in modalità SQLCMD, in un file di script di Windows o in un passaggio del processo del sistema operativo (Cmd.exe) di un SQL Server Lavoro agente. Questa utility utilizza ODBC per eseguire batch Transact-SQL.

Risoluzione

Ricorda che sei in grado di collegarti a un DB ed eseguire sql da Visual Studio. Vedresti lo stesso errore di sintassi se aprissi lo stesso script in SSMS. Tuttavia, sia in SSMS che in Visual Studio, è possibile "abilitare" la modalità SQLCMD.

VS 2017

  • tasto destro del mouse sull'editor contenente lo script sql
  • fai clic su Impostazioni di esecuzione
  • fare clic su Modalità SQLCMD
  • Nota che puoi fare la stessa cosa dal menu SQL

SSMS 17, SSMS 18

  • Query (voce di menu)
  • Modalità SQLCMD

Guarda anche

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.