Ошибка в SQL script: допускается только одно утверждение для каждой партии

У меня есть 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" между операторами, поскольку предлагаемая ошибка ничего не делает.

Ответ 1

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

Ответ 2

Независимо от того, что это кажется довольно старым, я застрял в течение нескольких часов с этим, и я думаю, что этот способ может быть полезен для многих.

В Database project файлы, установленные как Build, рассматриваются как структура базы данных, поэтому в таком файле по дизайну допускается только один оператор. Go, ни какой-либо другой терминатор партии не изменят это поведение, это сообщение является просто ошибкой. Подробнее здесь.

В этом проекте есть много других вариантов сборки файлов. Для вашего случая кажется, что PostDeploy. В таком файле вы можете иметь различные команды типа inserts и т.д.

Затем вы можете использовать вывод проекта базы данных как файл dacpac для приложений DB-уровня данных (в противном случае он не включается).

Ответ 3

Удалите из (полутоплицы) из последнего из каждого оператора, и я не уверен, но GO не требуется между вышеуказанными инструкциями вставки.