Меня всегда смущало, когда следует использовать ключевое слово GO после команд и нужна ли точка с запятой в конце команд. В чем различия и почему / когда я должен их использовать?
Когда я запускаю Generate-script в SQL Server Management Studio, кажется, что он везде использует GO, но не точку с запятой.
sql
sql-server
Аид
источник
источник
Ответы:
GO
относится только к SSMS - это не настоящий Transact SQL, он просто сообщает SSMS, что нужно последовательно отправлять операторы SQL между каждым из нихGO
в отдельных пакетах.Это
;
разделитель операторов SQL, но по большей части механизм может интерпретировать, где ваши операторы разбиты.Основное исключение и место, где
;
чаще всего используется, - это оператор выражения общей таблицы.источник
GO
что часть T-SQL не;
является, а естьMERGE
Заявление должно быть прекращено с запятой.;
это устарело, НЕ использовать его, это не рекомендуется, то есть, согласно источнику, он станет обязательным.Причина, по которой вы видите так много GO в сгенерированных сценариях DDL, заключается в следующем правиле о пакетах.
Один из вариантов использования сгенерированного DDL - создание нескольких объектов в одном файле. По этой причине генератор DDL должен иметь возможность генерировать пакеты. Как говорили другие, инструкция GO завершает пакет.
источник
ИДТИ
Go - это пакетный разделитель. Это означает, что все в этом пакете является локальным для этого конкретного пакета.
Любые объявления переменных, табличных переменных и т. Д. Не проходят через
GO
операторы.Таблицы #Temp являются локальными для соединения, поэтому они охватывают операторы GO.
Точка с запятой
Точка с запятой - это терминатор выражения. Это используется исключительно для идентификации того, что конкретный оператор закончился.
В большинстве случаев самого синтаксиса оператора достаточно, чтобы определить конец оператора.
Однако CTE требуют, чтобы первым был оператор WITH, поэтому вам нужна точка с запятой перед WITH.
источник
MERGE
Заявление должно быть прекращено с запятой.Для завершения каждого оператора SQL следует использовать точку с запятой. Это определено в стандартах SQL,
Конечно, чаще всего SQL Server позволяет вам опустить терминатор оператора, но зачем приобретать дурные привычки?
Как указывали другие, оператор, предшествующий общему табличному выражению (CTE), должен заканчиваться точкой с запятой. Как следствие, от людей, которые не полностью приняли терминатор с запятой, мы видим следующее:
что, на мой взгляд, выглядит очень странно. Я полагаю, что это имеет смысл в онлайн-форуме, когда вы не можете сказать качество кода, в который он будет вставлен.
Кроме того,
MERGE
оператор должен заканчиваться точкой с запятой. Вы видите здесь закономерность? Это несколько новых дополнений к TSQL, которые полностью соответствуют стандартам SQL. Похоже, что команда SQL Server намерена ввести обязательное использование терминатора с запятой.источник
GO - это терминатор пакета, точка с запятой - терминатор оператора.
вы будете использовать GO, если хотите иметь несколько операторов create proc в одном скрипте, потому что create proc должен быть первым оператором в пакете. Если вы используете общие табличные выражения, тогда оператор перед его завершением должен быть точкой с запятой.
источник
MERGE
Заявление должно быть прекращено с запятой.