Между чем различие ;
и GO
в хранимой процедуре в SQL Server?
На самом деле, если я имею хранимую процедуру в SQL-сервере и хочу для помещения t отдельные запросы в нем, которые первый просто вычисляет количество записей (количество), и второй выбирает некоторые записи на основе некоторых условий, затем что я должен использовать между этим два запроса?
Go
или ;
;
просто завершает утверждение.
GO - это не оператор, а команда серверу зафиксировать текущую транзакцию в базе данных. Это создает остановку внутри транзакции.
http://msdn.microsoft.com/en-us/library/ms188037.aspx
(Обновление, спасибо за комментарии):
GO - это утверждение, предназначенное для Management studio, насколько я знаю, может быть и для других инструментов.
Точка с запятой разделяет запросы, команда 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
GO не является командой для сервера, это разделитель пакетов по умолчанию для большинства клиентских инструментов, поставляемых MS. Когда клиентский инструмент встречает "GO" на новой строке сам по себе, он посылает все команды, которые он накопил до этого, на сервер, а затем начинает все заново.
Это означает, что любые переменные, объявленные в одной партии, недоступны в последующих партиях. И это также означает, что многострочные комментарии не могут быть размещены вокруг команды "GO" - потому что сервер увидит первую партию и увидит комментарий без конца.
Он отмечает конец пакета в Query Analyzer и, следовательно, сигнализирует об окончании определения хранимой процедуры в этом пакете. Насколько я знаю, он не является частью sp. { {1}} GO не является командой TSQL.
И; просто заканчивает заявление.