J'ai 4 scripts SQL que je veux exécuter dans un DACPAC dans PostDeployment, mais quand j'essaye de construire le projet VS pour 3 d'entre eux, j'obtiens cette erreur:
Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.
Les scripts ne contiennent que des instructions INSERT
dans différentes tables de la base de données. Et tous sont structurés comme si
IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');
uniquement sur des tables différentes et avec des données différentes.
Ma question est la suivante: pourquoi VS se plaint-il de 3 d'entre eux alors que tous les scripts sont identiques en termes de syntaxe et d'opérations?
PS: Ajouter 'GO' entre les instructions comme le suggère l'erreur ne fait rien.
J'ai trouvé le problème. Quand j'ai ajouté le fichier dans VS, j'ai oublié de définir Build Action = None
depuis les propriétés du fichier. Le fait de changer cela a résolu le problème et le projet est maintenant compilé.
Indépendamment, cela semble être assez vieux, je me suis collé à cela aussi pendant quelques heures et je pense que cette façon pourrait être utile pour beaucoup.
Dans Database project
, les fichiers définis comme Build
sont considérés comme une structure de base de données, de sorte qu'une seule déclaration est autorisée dans ce fichier par conception. Go
ni aucun autre terminateur de lot ne changera ce comportement, ce message est une erreur. Plus d'infos ici.
Il existe de nombreuses autres options de construction pour les fichiers dans ce projet. Pour votre cas, il semble que PostDeploy
. Dans ce fichier, vous pouvez avoir diverses commandes telles que inserts
etc.
Vous pouvez ensuite utiliser la sortie du projet de base de données comme fichier dacpac pour les applications de base de données Data-Tier (sinon, ce n’est pas inclus).