Помилка в SQL-скрипті: на одну партію дозволено лише одне твердження


128

У мене є 4 sql сценарії, які я хочу запустити в DACPAC в PostDeployment, але коли я намагаюся створити проект VS для 3 з них, я отримую цю помилку:

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

Сценарії містять лише INSERTзаяви у різних таблицях БД. І всі вони структуровані так

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');

тільки на різних таблицях і з різними даними.

Моє запитання: чому VS скаржиться на 3 з них, коли всі сценарії однакові за синтаксисом та операціями?

PS: Додавання "GO" між операторами, оскільки помилка підказує, нічого не робить.

Відповіді:


319

Я знайшов проблему. Коли я додав файл у VS, я забув встановити Build Action = Noneз властивостей файлу. Тож зміни, які вирішили проблему, і проект тепер компілюється.


26
Чудовий улов. Вау, Microsoft, серйозно ?? Як ця помилка чи її повідомлення інтуїтивно зрозуміли будь-яким способом, формою чи формою?
Майк К

9
Оцініть цю відповідь, за винятком того, що мене бентежить ваше використання "забутого" - як у світі в першу чергу потрібно знати, що це потрібно?
pettys

2
Тому що я робив подібний сценарій деякий час тому, і хтось розповів мені про збірку дій немає :)
Cosmin Ionascu

Це вирішило мою проблему. Пальці вгору!
dance2die

3
Чудово! врятував мені день. І сором MSBuild за таке оманливе повідомлення
Dio Phung

8

Незважаючи на те, що це здається досить старим, я затримався на цьому також кілька годин, і я думаю, що цей спосіб може бути корисним для багатьох.

В Database projectфайли набору , як Buildрозглядаються як структури баз даних так просто один оператор допускаються в такому файл по дизайну. Goні будь-який інший термінатор партії не змінить цю поведінку, це повідомлення є просто помилкою. Більше інформації тут.

Існує багато інших варіантів збирання файлів у такому проекті. Для вашого випадку здається, що це PostDeploy. У такому файлі у вас можуть бути різні команди, наприклад, insertsтощо.

Тоді ви можете використовувати результат проекту Database як файл dacpac для додатків Data-Tier DB (інакше він не включений).


-3

Вилучіть; (напівкрапка) з останнього кожного заяви, і я не впевнений, але GO не потрібно між вищевказаними операторами вставки.


Зробив це. Нічого не робить. Я знаю, що GO не потрібен, але я спробував це, тому що витратив на це більше 2 годин.
Космін Іонаску

4
Включення напів двокрапки після кожного висловлювання є стандартним синтаксисом і його обстоюють роками. Було 2 речі, які пішли не так через відсутність напівколонок. Консультація розробника не включати напівкрапку, де краща напівкрапка є найкращою практикою, викликає сумніви.
Брендон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.