Zawsze byłem zdezorientowany, kiedy powinienem używać słowa kluczowego GO po poleceniach i czy na końcu poleceń wymagany jest średnik. Jakie są różnice i dlaczego / kiedy powinienem ich używać?
Kiedy uruchamiam skrypt Generate w SQL Server Management Studio, wydaje się, że wszędzie używa GO, ale nie średnika.
sql
sql-server
Hades
źródło
źródło
Odpowiedzi:
GO
odnosi się tylko do SSMS - nie jest to rzeczywisty Transact SQL, po prostu nakazuje SSMS wysyłanie instrukcji SQL międzyGO
poszczególnymi partiami sekwencyjnie.Jest
;
to ogranicznik instrukcji SQL, ale w przeważającej części silnik może zinterpretować miejsce, w którym instrukcje są podzielone.Główny wyjątek i miejsce, w którym
;
najczęściej jest używany, znajduje się przed instrukcją Common Table Expression.źródło
GO
nie T-SQL, podczas gdy;
jestMERGE
Oświadczenie musi być zakończona średnikiem.;
jest przestarzałe, NIE używanie jej jest przestarzałe, tj. stanie się obowiązkowe według źródła.Powodem, dla którego widzisz tak wiele GO w wygenerowanych skryptach DDL, jest następująca reguła dotycząca partii.
Jednym z przypadków użycia Generated DDL jest generowanie wielu obiektów w jednym pliku. Z tego powodu generator DDL musi mieć możliwość generowania partii. Jak powiedzieli inni, instrukcja GO kończy partię.
źródło
UDAĆ SIĘ
Go to separator partii. Oznacza to, że wszystko w tej partii jest lokalne dla tej konkretnej partii.
Żadne deklaracje zmiennych, zmiennych tabel itp. Nie przechodzą przez
GO
instrukcje.Tabele #Temp są lokalne dla połączenia, więc obejmują wszystkie instrukcje GO.
Średnik
Średnik jest zakończeniem instrukcji. Służy to wyłącznie do stwierdzenia, że określone oświadczenie się zakończyło.
W większości przypadków do określenia końca instrukcji wystarczy sama składnia instrukcji.
CTE wymagają jednak, aby Z było pierwszą instrukcją, więc potrzebujesz średnika przed Dzięki.
źródło
MERGE
Oświadczenie musi być zakończona średnikiem.Do kończenia każdej instrukcji SQL należy używać średnika. Jest to zdefiniowane w standardach SQL,
Jasne, najczęściej SQL Server pozwala pominąć terminator instrukcji, ale po co wpadać w złe nawyki?
Jak zauważyli inni, instrukcja poprzedzająca wspólne wyrażenie tabeli (CTE) musi być zakończona średnikiem. W konsekwencji od ludzi, którzy nie przyjęli w pełni terminatora średnika, widzimy to:
co wydaje mi się naprawdę dziwne. Przypuszczam, że ma to sens na forum internetowym, kiedy nie możesz określić jakości kodu, do którego zostanie wklejony.
Ponadto
MERGE
instrukcja musi być zakończona średnikiem. Czy widzisz tutaj wzór? Oto kilka nowszych dodatków do TSQL, które są ściśle zgodne ze standardami SQL. Wygląda na to, że zespół SQL Server zmierza w kierunku wprowadzenia obowiązku używania terminatora średnika.źródło
GO to terminator partii, średnik to terminator instrukcji.
użyjesz GO, jeśli chcesz mieć wiele instrukcji create proc w jednym skrypcie, ponieważ create proc musi być pierwszą instrukcją w partii. Jeśli używasz typowych wyrażeń tabelarycznych, instrukcja poprzedzająca musi być zakończona średnikiem
źródło
MERGE
Oświadczenie musi być zakończona średnikiem.