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


18

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 la ":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 "aucune". Cela n'aide pas, l'erreur persiste. Qu'est-ce que j'oublie ici?


désolé, je suppose que pour être plus clair "à quelle action le script est-il associé": r "?" :)
Ed Elliott

Réponses:


16

En supposant que l'erreur se produit pendant le processus de génération et que vous n'avez aucune erreur de syntaxe réelle, il s'agit d'un 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 de 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 Transact-SQL Editor -> , sélectionnez Execution Settings -> , puis enfin sélectionnez SQLCMD Mode . 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 action Build définie sur PostDeploy . S'il est défini sur Aucun, il sera entièrement ignoré par le processus de génération SSDT.


4

Erreur valide

C'est parce :r somescript.sqlque SQL n'est pas 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 également

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.