В SQL Server, когда вы должны использовать GO, и когда вы должны использовать полуточку;?
Я всегда смущался, когда мне нужно было использовать ключевое слово GO после команд, и нужно ли в конце команд использовать пол-двоеточия. Каковы различия и почему/когда я должен их использовать?
Когда я запускаю Generate- script в SQL Server Management Studio, он, кажется, использует GO по всему месту, но не в виде двоеточия.
Ответы
Ответ 1
GO
относится только к SSMS - он не является фактическим Transact SQL, он просто сообщает SSMS отправлять SQL-предложения между каждыми GO
в отдельных партиях последовательно.
;
является разделителем инструкций SQL, но по большей части движок может интерпретировать, где ваши заявления разбиты.
Основное исключение и место, где наиболее часто используется ;
, - это выражение перед выражением выражения Common Table.
Ответ 2
Причина, по которой вы видите так много GO в сценариях сгенерированных DDL, состоит из следующего правила о партиях.
СОЗДАТЬ ПО УМОЛЧАНИЮ, СОЗДАТЬ ФУНКЦИЮ, СОЗДАТЬ ПРОЦЕДУРУ, СОЗДАТЬ ПРАВИЛО, СОЗДАТЬ TRIGGER и CREATE VIEW не могут сочетаться с другими в пакете. CREATE утверждение должно начинаться с партии. Все другие утверждения, которые следуют в этом пакет будет интерпретироваться как часть определение первого CREATE утверждение.
Одним из вариантов использования Generated DDL является создание нескольких объектов в одном файле. Из-за этого генератор DDL должен иметь возможность генерировать партии. Как утверждают другие, оператор GO заканчивает пакет.
Ответ 3
GO
Go - это разделитель пакетов. Это означает, что все в этой партии является локальным для этой конкретной партии.
Любые объявления переменных, переменных таблицы и т.д. не проходят через инструкции GO
.
# Таблицы Temp являются локальными для соединения, поэтому они охватывают все операторы GO.
Запятая
Точка с запятой - это терминатор утверждения. Это чисто используется для определения того, что конкретный оператор закончился.
В большинстве случаев сам синтаксис оператора достаточно для определения конца инструкции.
CTE, однако, требуйте, чтобы WITH был первым утверждением, поэтому вам нужна точка с запятой до WITH.
Ответ 4
Вы должны использовать запятую для завершения каждого оператора SQL. Это определено в SQL-стандартах,
Конечно, чаще всего SQL Server позволяет вам опустить терминатор операторов, но зачем вникать в вредные привычки?
Как указывали другие, утверждение, предшествующее обычному выражению таблицы (CTE), должно заканчиваться точкой с запятой. Как следствие, от людей, которые не полностью охватили терминатор с половиной двоеточия, мы видим следующее:
;WITH ...
который, по моему мнению, выглядит странно. Полагаю, что это имеет смысл в онлайн-форуме, когда вы не можете сказать качество кода, в которое он будет вставлен.
Кроме того, оператор MERGE
должен быть прерван точкой с запятой. Вы видите здесь образец? Это несколько новых дополнений к TSQL, которые тесно соответствуют стандартам SQL. Похоже, что команда SQL Server идет по пути мандата на использование терминатора с запятой.
Ответ 5
GO является терминатором партии, точка с запятой - терминатор утверждения.
вы будете использовать GO, если хотите, чтобы несколько инструкций создания proc в 1 script, потому что создание proc должно быть первым оператором в пакете. Если вы используете общие табличные выражения, то перед ним необходимо завершить работу с помощью двоеточия