Używam narzędzia ADO.NET oraz narzędzia sqlcmd do wysyłania skryptów SQL do programu SQL Server 2008. Jaka jest różnica między używaniem ;
i GO
do oddzielania fragmentów kodu SQL?Jaka jest różnica między "; i "GO" w T-SQL?
Odpowiedz
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.
ś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.
Myślałem, że; znak oddziela listę poleceń SQL, GO po prostu instruuje program SQL Server, aby zatwierdził wszystkie poprzednie polecenia.
„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.
"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.
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
Pod SQL Server TSQL (2005 - 2016) należy pamiętać, że:
- średnik (;) jest blok terminator.
- GO to terminator z serii.
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.
- 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ń.
- 1. Jaka jest różnica między instalacją go get and go install?
- 2. Jaka jest różnica między? : i ||
- 3. Jaka jest różnica między $ i $$?
- 4. jaka jest różnica między @ i @@ w module?
- 5. Jaka jest różnica między [0] a [: 1] w Go?
- 6. Jaka jest różnica między = i: = w mysql?
- 7. Jaka jest różnica między! = I =! w Javie?
- 8. Jaka jest różnica między 'i "w PHP
- 9. Jaka jest różnica między! i !! w yaml?
- 10. Jaka jest różnica między * i. * W Matlab?
- 11. Jaka jest różnica między | i || w MATLAB?
- 12. Jaka jest różnica między * i * | * w CSS?
- 13. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 14. Jaka jest różnica między `alias` i` typedef`?
- 15. Jaka jest różnica między java i jsp?
- 16. Jaka jest różnica między -anydpi i -nodpi?
- 17. Jaka jest różnica między NetFx45WebLink i NetFx45RedistLink
- 18. Jaka jest różnica między asersem i static_assert?
- 19. Jaka jest różnica między PropertyChangeListener i VetoableChangeListener?
- 20. Jaka jest różnica między Ja i Ja?
- 21. Jaka jest różnica między ATL i WTL?
- 22. Jaka jest różnica między FontMetrics.stringWidth() i FontMetrics.getStringBounds()?
- 23. Jaka jest różnica między "CompletionStage" i "CompletableFuture"?
- 24. Jaka jest różnica między CellClick i CellMouseClick?
- 25. Jaka jest różnica między ObjectResult i JsonResult
- 26. Jaka jest różnica między ssize_t i ptrdiff_t?
- 27. Jaka jest różnica między fn i fn *?
- 28. Jaka jest różnica między getMeasuredHeight i getHeight
- 29. Jaka jest różnica między beginTrackingWithTouch i touchBegan?
- 30. Jaka jest różnica między init() i window.init()?
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 –