Как TechNet says, GO
это означает конец SQL партии к SQL утилит. Например, когда SQL Server Management Studio сталкивается с разделителем пакетов, он знает, что весь текст до сих пор является независимым SQL-запросом.
Мы используем аналогичную технику в нашем программном обеспечении. Мы сохраняем все наши процессы, сценарии схем, преобразования данных и т. Д. В файлах сценариев SQL (проверяется на исходный контроль). Когда наш установщик читает один из этих файлов сценариев, GO сообщает нашему парсеру «вы можете запустить SQL, который вы уже прочитали».
Приятная особенность такого разделителя пакетов, как GO
, заключается в том, что вы можете включить два SQL-запроса вместе в том же скрипте, который обычно вызывает ошибку.Например, попробуйте удалить и заново создать ту же хранимую процедуру в том же файле сценария:
if exists (select * from sys.procedures where name = 'sp_test')
drop procedure sp_test
create procedure sp_test as
begin
select 1
end
Если запустить приведенный выше код, вы получите сообщение об ошибке:
Msg 156, Level 15, State 1, Procedure sp_test, Line 5 Incorrect syntax near the keyword 'begin'.
И SSMS будет показать вам ошибку:
Incorrect syntax. 'CREATE PROCEDURE' must be the only statement in a batch.
Использование пакетного сепаратора может помочь вам получить эту ошибку:
if exists (select * from sys.procedures where name = 'sp_test')
drop procedure sp_test
GO
create procedure sp_test as
begin
select 1
end
Это очень удобно, если, скажем, вам нужен один SQL-скрипт в исходном элементе управления для хранения хранимой процедуры или функции. Мы часто используем эту схему.
Еще одна интересная вещь, которую вы можете сделать, это использовать его, чтобы запустить запрос несколько раз:
INSERT INTO MyTable (...) ...
GO 10 -- run all the above 10 times!
Как the answers to this SO question показывают, вы можете также настроить его на то, что вы хотите. Если вы хотите возиться со своими коллегами, установите разделитель партии в нечто вроде «WHERE» вместо «GO». Весело! :)
Возможный дубликат [Что такое использование GO в SQL Server Management Studio?] (Http://stackoverflow.com/questions/2299249/what-is-the-use-of-go-in-sql -server-management-studio) –
@JohnnyBones, нет, это не то же самое (я даже связался с этим сообщением в моем вопросе). Этот пост в основном говорит, что GO - это разделитель партий, но мой вопрос задает вопрос, что классный разделитель подходит для –
. Посмотрите на ответ, предоставленный tvanfosson в этом вопросе (26 upvotes). –