web-dev-qa-db-fra.com

Erreur dans le script SQL: une seule instruction est autorisée par lot

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.

111
Cosmin Ionascu

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é.

262
Cosmin Ionascu

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).

7
Jaroslav Kadlec