Ответ 1
Я нашел проблему. Когда я добавил файл в VS, я забыл установить Build Action = None
из свойств файла. Таким образом, это изменение устраняет проблему и проект теперь компилируется.
У меня есть 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" между операторами, поскольку предлагаемая ошибка ничего не делает.
Я нашел проблему. Когда я добавил файл в VS, я забыл установить Build Action = None
из свойств файла. Таким образом, это изменение устраняет проблему и проект теперь компилируется.
Независимо от того, что это кажется довольно старым, я застрял в течение нескольких часов с этим, и я думаю, что этот способ может быть полезен для многих.
В Database project
файлы, установленные как Build
, рассматриваются как структура базы данных, поэтому в таком файле по дизайну допускается только один оператор. Go
, ни какой-либо другой терминатор партии не изменят это поведение, это сообщение является просто ошибкой.
Подробнее здесь.
В этом проекте есть много других вариантов сборки файлов.
Для вашего случая кажется, что PostDeploy
. В таком файле вы можете иметь различные команды типа inserts
и т.д.
Затем вы можете использовать вывод проекта базы данных как файл dacpac для приложений DB-уровня данных (в противном случае он не включается).
Удалите из (полутоплицы) из последнего из каждого оператора, и я не уверен, но GO не требуется между вышеуказанными инструкциями вставки.