web-dev-qa-db-fra.com

Pourquoi: r La commande SQLCMD est-elle marquée comme incorrecte dans le script de post-déploiement?

J'ai travaillé plusieurs fois avec des scripts de post-déploiement et j'ai toujours, intuitivement, utilisé l'action de build "PostDeploy", car c'est ce que c'est. Maintenant, pour la première fois, j'essaie de suivre les instructions intégrées du modèle de script pour utiliser le ":r somescript.sql" syntaxe.

Immédiatement, cette ligne devient marquée comme incorrecte:

"SQL80001 syntaxe incorrecte à côté de ':'"

J'ai trouvé des suggestions pour définir le PDS pour créer l'action "aucun". Cela n'aide pas, l'erreur persiste. Qu'est-ce que j'oublie ici?

21
Magier

En supposant que l'erreur se produit pendant le processus de génération et que vous n'avez pas d'erreurs de syntaxe réelles, et c'est simple

:r path\to\file.sql

puis l'erreur se produit également lorsque le fichier importé n'existe pas. Veuillez vérifier l'emplacement du fichier. Si vous n'avez pas fourni de chemin absolu, le chemin sera relatif au dossier de la solution (du moins pour moi, c'est le cas).

Si, lors du développement, vous souhaitez voir l'erreur signalée par le processus de génération, assurez-vous d'activer le "mode SQLCMD" dans l'éditeur T-SQL dans Visual Studio. Il y a un bouton à l'extrême droite dans la barre de boutons avec un "!" en elle qui devrait permettre cela. Ou vous pouvez aller dans le menu SQL , sélectionnez Éditeur Transact-SQL ->, sélectionnez Paramètres d'exécution ->, puis sélectionnez enfin Mode SQLCMD. Maintenant, lorsque vous exécutez le script, il interprétera correctement :r, tout comme le processus de génération/publication.

En outre, votre script Post Deploy (PDS) doit avoir son Build Action défini sur PostDeploy. S'il est défini sur Aucun, il sera entièrement ignoré par le processus de génération SSDT.

18
Solomon Rutzky

Erreur valide

Ceci est dû au fait :r somescript.sql n'est pas un SQL valide. Vous voyez une erreur de syntaxe, qui est précisément ce que le message d'erreur indique.

SQL80001: syntaxe incorrecte près de ':'.

Mode SQLCMD

Le script de post-déploiement est exécuté en mode SQLCMD.

L'utilitaire sqlcmd vous permet de saisir des instructions Transact-SQL, des procédures système et des fichiers de script à l'invite de commandes, dans l'éditeur de requête en mode SQLCMD, dans un fichier de script Windows ou dans une étape de travail du système d'exploitation (Cmd.exe) d'un serveur SQL Server Travail d'agent. Cet utilitaire utilise ODBC pour exécuter des lots Transact-SQL.

Résolution

N'oubliez pas que vous pouvez vous connecter à une base de données et exécuter SQL à partir de Visual Studio. Vous verriez cette même erreur de syntaxe si vous ouvriez le même script dans SSMS. Cependant, dans SSMS et Visual Studio, vous pouvez "activer" le mode SQLCMD.

VS 2017

  • clic droit sur l'éditeur contenant le script sql
  • cliquez sur Paramètres d'exécution
  • cliquez sur Mode SQLCMD
  • Notez que vous pouvez faire la même chose depuis le menu SQL

SSMS 17, SSMS 18

  • Requête (élément de menu)
  • Mode SQLCMD

Voir aussi

6
Seth Flowers