Что является различием между; и Войдите в хранимую процедуру в SQL Server?

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

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

Go или ;

16
задан Josh Crozier 10 December 2015 в 03:10
поделиться

4 ответа

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

GO - это не оператор, а команда серверу зафиксировать текущую транзакцию в базе данных. Это создает остановку внутри транзакции.

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

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

23
ответ дан 30 November 2019 в 16:00
поделиться

Точка с запятой разделяет запросы, команда 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
13
ответ дан 30 November 2019 в 16:00
поделиться

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

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

4
ответ дан 30 November 2019 в 16:00
поделиться

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

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

2
ответ дан 30 November 2019 в 16:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: