Errore nello script SQL: è consentita una sola istruzione per batch


128

Ho 4 script sql che voglio eseguire in un DACPAC in PostDeployment, ma quando provo a costruire il progetto VS per 3 di questi ottengo questo errore:

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

Gli script contengono solo INSERTistruzioni in diverse tabelle sul DB. E tutti sono strutturati in questo modo

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

solo su tabelle diverse e con dati diversi.

La mia domanda è: perché VS si lamenta di 3 di loro quando tutti gli script sono uguali in termini di sintassi e operazioni?

PS: l'aggiunta di "GO" tra le istruzioni come suggerisce l'errore non fa nulla.

Risposte:


319

Ho trovato il problema. Quando ho aggiunto il file in VS mi sono dimenticato di impostare Build Action = Nonedalle proprietà del file. Così cambiando ciò ha risolto il problema e il progetto ora viene compilato.


26
Ottima cattura. Wow, Microsoft, sul serio ?? In che modo quell'errore o il suo messaggio sono intuitivi in ​​qualche modo, forma o forma?
Mike K,

9
Apprezzo questa risposta, tranne per il fatto che sono confuso dal tuo uso di "dimenticato" - come si può sapere al mondo che è necessario in primo luogo?
pettys,

2
Perché ho fatto una sceneggiatura simile qualche tempo fa e qualcuno mi ha parlato di build action none :)
Cosmin Ionascu

Questo ha risolto il mio problema. Pollice su!
dance2die,

3
Grande ! mi ha salvato la giornata. E vergogna per MSBuild per un messaggio così fuorviante
Dio Phung,

8

Indipendentemente da ciò, sembra essere piuttosto vecchio, mi sono bloccato per alcune ore anche con quello e penso che questo modo potrebbe essere utile per molti.

In Database project, i file impostati come Buildvengono considerati come struttura del database, pertanto in tale file è consentita una sola istruzione in base alla progettazione. Goné nessun altro terminatore batch cambierà quel comportamento, quel messaggio è solo un errore. Maggiori informazioni qui.

Ci sono molte altre opzioni di compilazione per i file in tale progetto. Per il tuo caso sembra che PostDeploy. In tale file potresti avere vari comandi come insertsecc.

Quindi è possibile utilizzare l'output del progetto Database come file dacpac per le applicazioni DB di livello dati (altrimenti non è incluso).


-3

Rimuovi il punto (punto e virgola) dall'ultima di ogni istruzione e non sono sicuro, ma GO non è richiesto tra le istruzioni insert sopra.


Fatto. Non fa niente. So che GO non è richiesto, ma l'ho provato perché ho perso più di 2 ore in questo.
Cosmin Ionascu,

4
Includere un punto e virgola dopo ogni affermazione è una sintassi standard ed è stata sostenuta per anni. Ci sono state 2 molte cose che sono andate male a causa della mancanza di punti e virgola. Consigliare uno sviluppatore di non includere un punto e virgola in cui un punto e virgola è la migliore pratica è discutibile.
Brandon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.