В чем разница между; и GO в хранимой процедуре в SQL Server?

В чем разница между ; и GO в хранимой процедуре в SQL Server?

Собственно, если у меня есть хранимая процедура на SQL-сервере и вы хотите поместить в нее t отдельных запросов, которые сначала вычисляют количество записей (количество), а второе выбирает некоторые записи на основе некоторых условий, то что Я использую между этими двумя запросами?

GO или ;

Ответ 1

; просто заканчивается выражение.

GO - это не оператор, а команда для сервера для передачи текущего пакета в базу данных. Это создает остановку внутри транзакции.

http://msdn.microsoft.com/en-us/library/ms188037.aspx

(Обновление, спасибо за комментарии):
Насколько я знаю, GO - это выражение, предназначенное для студии управления, возможно, для других инструментов.

Ответ 2

Точка с запятой отделяет запросы, команда GO отделяет партии. (Также GO не является командой T-SQL, это команда, признанная утилитами sqlcmd и osql и Management Studio.)

Вы не можете использовать GO внутри хранимой процедуры. Если вы попытаетесь, определение процедуры закончится там, а остальное будет отдельной партией.

Локальная переменная имеет область действия пакета, поэтому после команды GO вы не можете использовать локальные переменные, объявленные перед командой GO:

declare @test int

set @test = 42

GO

select @Test -- causes an error message as @Test is undefined

Ответ 3

GO - это не команда для сервера, это разделитель пакетов по умолчанию для большинства клиентских инструментов для поставки MS. Когда клиентский инструмент встречает "GO" в новой строке сам по себе, он отправляет все команды, которые он накопил до сих пор на сервер, а затем запускается заново.

Это означает, что любые переменные, объявленные в одной партии, недоступны в последующих партиях. И это также означает, что многострочные комментарии не могут быть размещены вокруг команды "GO" - потому что сервер увидит первую партию и увидит незавершенный комментарий.

Ответ 4

Он отмечает окончание партии в Query Analyzer и поэтому сигнализирует о завершении определения хранимой процедуры в этой партии. Насколько я знаю, это не часть sp. GO не является командой TSQL.

И; просто заканчивает утверждение.