Разница между GO и BEGIN... END

Есть ли разница между "GO" и "BEGIN... END" в SQL-скриптах/хранимых процедурах? Более конкретно, BEGIN... END указывает партии так же, как GO?

Ответ 1

GO не является фактически командой, понимаемой сервером. Это просто разделитель, используемый клиентским инструментом, например. Query Analyzer, чтобы разбить SQL на партии. Каждая партия затем обычно отправляется на сервер отдельно. Клиентский инструмент обычно позволяет настроить разделитель пакетов как все, что вы выберете, GO - это соглашение.

BEGIN/END - это маркер блока, который обертывает секцию кода так же, как и фигурные скобки на других языках.

Ответ 2

Еще одна маленькая вещь о GO.

Переменные, определенные между GO, относятся только к этому региону и не существуют вне этого региона.

Ответ 3

GO

Разделяет разные операторы в пакетах (вы не можете использовать их внутри хранимой процедуры)

BEGIN.. END

Используется для группировки вещей внутри SP, например {и} в С#

IF x
BEGIN 
   -- do y
   -- do w
END

Ответ 4

Также рекомендуется использовать начальные и конечные операторы в любое время, когда вы используете if в t-sql. Если вы не используете начало и конец, тогда только следующий оператор после оператора if будет выполняться как часть if, и это часто приводит к ошибкам.