В 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 должно быть первым оператором в пакете. Если вы используете общие табличные выражения, то перед ним необходимо завершить работу с помощью двоеточия