Eu tenho 4 scripts sql que quero executar em um DACPAC no PostDeployment, mas quando tento criar o projeto VS para 3 deles, recebo este erro:
Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.
Os scripts contêm apenas INSERT
instruções em tabelas diferentes no banco de dados. E todos eles estão estruturados assim
IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');
somente em tabelas diferentes e com dados diferentes.
Minha pergunta é por que o VS está reclamando de três deles quando todos os scripts são iguais em termos de sintaxe e operações?
PS: Adicionar 'GO' entre as instruções, conforme o erro sugere, não faz nada.
sql
sql-server
visual-studio-2012
dacpac
Cosmin Ionascu
fonte
fonte
Independentemente disso, parece muito antigo. Fiquei por algumas horas com isso também e acho que dessa maneira poderia ser útil para muitos.
Em
Database project
, os arquivos definidos comoBuild
são considerados como estrutura do banco de dados, portanto, apenas uma instrução é permitida nesse arquivo por design.Go
nem qualquer outro terminador de lote alterará esse comportamento, essa mensagem é apenas um erro. Mais informações aqui.Existem muitas outras opções de compilação para arquivos nesse projeto. Para o seu caso, parece isso
PostDeploy
. Nesse arquivo, você pode ter vários comandos, comoinserts
etc.Em seguida, você pode usar a saída do projeto de banco de dados como arquivo dacpac para aplicativos de banco de dados da camada de dados (caso contrário, não estará incluído).
fonte
Remova o; (ponto-e-vírgula) do final de cada instrução e não tenho certeza, mas o GO não é necessário entre as instruções de inserção acima.
fonte