В чем разница между; и 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.
И; просто заканчивает утверждение.