Błąd w skrypcie SQL: dozwolona jest tylko jedna instrukcja w partii

128

Mam 4 skrypty sql, które chcę uruchomić w DACPAC w PostDeployment, ale kiedy próbuję zbudować projekt VS dla 3 z nich, pojawia się ten błąd:

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

Skrypty zawierają tylko INSERTinstrukcje w różnych tabelach w bazie danych. Wszystkie z nich są tak skonstruowane

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

tylko w różnych tabelach iz różnymi danymi.

Moje pytanie brzmi: dlaczego VS narzeka na 3 z nich, skoro wszystkie skrypty są takie same pod względem składni i operacji?

PS: Dodanie „GO” między instrukcjami, jak sugeruje błąd, nic nie robi.

Cosmin Ionascu
źródło

Odpowiedzi:

319

Znalazłem problem. Kiedy dodałem plik w VS, zapomniałem ustawić Build Action = Nonewe właściwościach pliku. Zmiana ta rozwiązała problem i projekt jest teraz kompilowany.

Cosmin Ionascu
źródło
26
Ładny chwyt. Wow, Microsoft, poważnie? W jaki sposób ten błąd lub jego przesłanie są intuicyjne w jakikolwiek sposób, w jakim kształcie lub formie?
Mike K
9
Doceń tę odpowiedź, z wyjątkiem tego, że jestem zdezorientowany tym, jak użyłeś „zapomniałem” - skąd na świecie wiedzieć, że jest to konieczne w pierwszej kolejności?
pettys
2
Bo podobny scenariusz zrobiłem jakiś czas temu i ktoś mi powiedział o budowaniu akcji brak :)
Cosmin Ionascu
To rozwiązało mój problem. Kciuki w górę!
dance2die
3
Świetny ! uratował mój dzień. I szkoda MSBuild za tak mylącą wiadomość
Dio Phung
8

Pomimo tego, że wydaje się to dość stare, utknąłem z tym na kilka godzin i myślę, że ten sposób może być pomocny dla wielu.

W programie Database projectpliki ustawione jako Buildsą traktowane jako struktura bazy danych, więc tylko jedna instrukcja jest dozwolona w takim pliku zgodnie z projektem. Goani żaden inny terminator wsadowy nie zmieni tego zachowania, ta wiadomość jest po prostu błędna. Więcej informacji tutaj.

Istnieje wiele innych opcji kompilacji plików w takim projekcie. W twoim przypadku wydaje się, że PostDeploy. W takim pliku możesz mieć różne polecenia, takie jak insertsitp.

Następnie można użyć danych wyjściowych projektu bazy danych jako pliku dacpac dla aplikacji bazy danych warstwy danych (w przeciwnym razie nie jest uwzględniony).

Jaroslav Kadlec
źródło
-3

Usuń; (średnik) z ostatniego z każdej instrukcji i nie jestem pewien, ale GO nie jest wymagane między powyższymi instrukcjami wstawiania.

donstack
źródło
Skończone. Nic nie robi. Wiem, że GO nie jest wymagane, ale próbowałem, ponieważ zmarnowałem na to ponad 2 godziny.
Cosmin Ionascu
4
Dołączanie średnika po każdej instrukcji jest standardową składnią i jest zalecane od lat. Było 2 wiele rzeczy, które poszły nie tak z powodu brakujących średników. Poradzenie deweloperowi, aby nie umieszczał średnika, gdy średnik jest najlepszą praktyką, jest wątpliwe.
Brandon