2009-10-04 40 views

Odpowiedz

50

GO w rzeczywistości nie jest poleceniem T-SQL. Komenda GO została wprowadzona przez narzędzia Microsoft jako metoda oddzielania instrukcji wsadowych, na przykład zakończenia procedury składowanej. GO jest obsługiwany przez narzędzia stosu Microsoft SQL, ale nie jest formalnie częścią innych narzędzi.

Nie można umieścić GO w ciągu znaków SQL i wysłać go jako część obiektu polecenia ADO.NET, ponieważ sam SQL nie rozumie tego terminu. Innym sposobem na wykazanie tego jest profiler: skonfiguruj niektóre instrukcje korzystające z GO w Query Analyzer/Management Studio, a następnie uruchom profilera po uruchomieniu. Zobaczysz, że są wydawane jako oddzielne polecenia do serwera.

Średnik służy do oznaczenia końca samego stwierdzenia, niekoniecznie całej partii.

http://msdn.microsoft.com/en-us/library/ms188037.aspx

+0

Uruchomiłem połączenie, aby przekonać się, że GO jest poprawną komendą t-sql: https://connect.microsoft.com/SQLServer/feedback/details/3138257/make-go-a-first-class- język-słowo kluczowe –

21

średnik jest separatorem instrukcji. Poprzednie instrukcje nie muszą być wykonywane po napotkaniu średnika.

GO 

Oznacza koniec partii. Wykonuje poprzednią porcję instrukcji, tak jak napotyka koniec bloku.

GO 2 

Środki wykonują tę partię wiele razy. Myślę, że skorzystałem z tej opcji dwa razy w życiu. Z drugiej strony, nie jestem DBA z handlu.

0

Myślałem, że; znak oddziela listę poleceń SQL, GO po prostu instruuje program SQL Server, aby zatwierdził wszystkie poprzednie polecenia.

4

„Go” jest zazwyczaj używany do wskazania końca partii instrukcji SQL, co oznacza, że ​​można mieć begin transaction i end transaction opakowane w jeden zbiór stwierdzeń, które mogą zawieść lub uda razem.

"; ' jest zwykle używany do oddzielania wielu instrukcji SQL od siebie. Jest to zauważalne w skryptach SQL, które muszą zwracać wiele zestawów rekordów, takich jak `select * from table1; wybierz * z tabeli2; " co skutkowałoby dwoma oddzielnymi zestawami rekordów po stronie klienta.

27

"GO" jest podobne do; w wielu przypadkach, ale w rzeczywistości oznacza koniec partii.

Każda partia jest zaangażowana gdy „GO” oświadczenie jest nazywany, więc jeśli masz:

SELECT * FROM table-that-does-not-exist; 
SELECT * FROM good-table; 

w swojej partii, to dobry-table wybrać nigdy nie będzie sprawdzony, ponieważ pierwszy select spowoduje błąd.

Jeśli zamiast miał:

SELECT * FROM table-that-does-not-exist 
GO 
SELECT * FROM good-table 
GO 

Pierwszy SELECT nadal powoduje błąd, ale skoro druga instrukcja jest we własnej partii, to będzie jeszcze wykonać.

GO nie ma nic wspólnego z podejmowaniem transakcji.

1

GO poleceń oznacza koniec partii. Dlatego wszystkie zmienne zadeklarowane przed GO są nieprawidłowe po poleceniu GO. Przeciw średnikowi nie kończy partii.

Jeśli użyjesz komendy DML w procedurze, użyj średnika zamiast GO. Na przykład:

CREATE PROCEDURE SpMyProc 
@myProcParam VARCHAR(20) 
AS 
DECLARE @myOtherParam INT = 5 
;DISABLE TRIGGER ALL ON tMyTable 
UPDATE tMyTable SET myVar = @myProcParam, mySecondVar = @myOtherParam 
;ENABLE TRIGGER OLL ON tMyTable 
2
  1. Pod SQL Server TSQL (2005 - 2016) należy pamiętać, że:

    • średnik (;) jest blok terminator.
    • GO to terminator z serii.
  2. Dodatkowo GO mogą być stosowane do wywołania tego samego bloku DML kilka razy stosując następującą składnię:

go [ile]

gdzie [ile] jest dodatnią liczbą całkowitą, która wskazuje, ile razy blok poleceń TSQL poprzedzających GO powinien być przeprowadzany w kółko.

  1. Ponadto, w przeciwieństwie do średnikiem, GO jest obowiązkowe przed nowym DDL, powiedzmy, podczas tworzenia nowego widoku, ponieważ średnik oddzielając poprzednich poleceń spowoduje błąd. Na przykład:

widok spadek #temporary_view
GO
utworzyć widok #another_view ...
-> Brak błędów

Jeśli zastąpiony GO średnikiem w poprzednim przykładzie, to będzie Podnieś następujący komunikat o błędzie:

'CREATE VIEW' musi być pierwszym stwierdzeniem w grupie zapytań.

Powiązane problemy