Какая польза от GO в SQL Server Management Studio и Transact SQL?

363

SQL Server Management Studio всегда вставляет команду GO, когда я создаю запрос, используя контекстное меню «Сценарий как» правой кнопкой мыши. Почему? Что на самом деле делает GO?

tvanfosson
источник
2
Дубликат - stackoverflow.com/questions/971177/…
ChrisF
29
@ChrisF - это не дубликат, хотя принятый ответ также отвечает на этот вопрос. Этот вопрос касается использования «GO» в транзакции - просто выясняется, что на самом деле это вообще не команда SQL. Этот вопрос гораздо более общий и пытается дать окончательный ответ на вопросы о команде GO в SSMS.
tvanfosson
3
Также взгляните на эту ссылку: для чего нужны операторы пакетной обработки?
Заин Ризви,
Документация Microsoft: заявления утилит SQL Server - GO : Пакет, предшествующий GO, будет выполняться указанное количество раз.
мин

Ответы:

304

Это пакетный терминатор, однако вы можете изменить его на что угодно альтернативный текст

SQLMenace
источник
80
gbn сделай это SELECT и посмотри, что происходит :-)
SQLMenace
14
Спасибо! Однако в чем же смысл заявления GO? Это может звучать глупо, но что означает «пакет кода»? msdn говорит, что после GO срок жизни переменных истекает. Не имеет ничего общего с обязательством по сделке, верно? Есть ли какие-либо обстоятельства, в которых я должен сохранять оператор GO в своих сценариях?
kate1138
4
Это означает, что весь T-SQL до этого будет выполняться «сразу». Насколько я понимаю, он взаимозаменяем с точкой с запятой (OLEDB / Oracle). Например, если у вас большой сценарий после развертывания, оператор GO между строками может помочь памяти, используемой в сценарии.
Энтони Мейсон
4
Этот ответ на самом деле не объясняет «что он на самом деле делает» или почему
Эндрю
Прочитав ответ @tvanfosson: действительно ли он взаимозаменяем с точкой с запятой?
Во II
299

Начиная с Management Studio 2005 кажется, что вы можете использовать GOс intпараметром, например:

INSERT INTO mytable DEFAULT VALUES
GO 10

Выше будет вставить 10 строк в mytable. Вообще говоря, GOбудет выполнять соответствующие команды SQL nраз .

MicSim
источник
199

Команда GO - это не инструкция Transact-SQL, а специальная команда, распознаваемая несколькими утилитами MS, включая редактор кода SQL Server Management Studio.

Команда GO используется для группировки команд SQL в пакеты, которые отправляются на сервер вместе. Команды, включенные в пакет, то есть набор команд со времени последней команды GO или начала сеанса, должны быть логически согласованы. Например, вы не можете определить переменную в одном пакете, а затем использовать ее в другом, поскольку область действия переменной ограничена пакетом, в котором она определена.

Для получения дополнительной информации см. Http://msdn.microsoft.com/en-us/library/ms188037.aspx .

tvanfosson
источник
37
В какой ситуации пакетирование вещей GOдействительно полезно?
nicodemus13
3
@ nicodemus13 См. stackoverflow.com/questions/20711326/…
Зайн Ризви,
4
так, если 1 оператор в пакете терпит неудачу, все терпит неудачу?
MonsterMMORPG
36

GO не является ключевым словом SQL.

Это разделитель пакетов, используемый клиентскими инструментами (такими как SSMS), чтобы разбить весь скрипт на пакеты

Ответили раньше несколько раз ... пример 1

ГБН
источник
4
В свою защиту я просматривал предложенные дубликаты до того, как задал вопрос - и ваш пример не появился, и на самом деле он не является дубликатом, хотя ответ применим.
tvanfosson
26
Трудно найти «GO» здесь :-)
gbn
20

Просто для добавления к существующим ответам, когда вы создаете представления, вы должны разделить эти команды на пакеты, используя go, иначе вы получите ошибку 'CREATE VIEW' must be the only statement in the batch. Так, например, вы не сможете выполнить следующий сценарий SQL безgo

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2
Михаил Сенютович
источник
Также создайте процедуры
Лучано Сантос
2
Это единственный ответ, который действительно касается первой части вопроса ОП: «... всегда вставляет команду GO .... Почему?». Кажется, большую часть времени из страха. Единственное время, которое требуется, - это когда команда должна быть в своем собственном пакете.
Белавский
7

Go означает, что любые операторы SQL, написанные до и после любого более раннего GO, будут отправляться на SQL-сервер для обработки.

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

В приведенном выше примере операторы перед GO 1 будут отправлены на sql sever в пакете, а затем любые другие операторы перед GO 2 перейдут на sql сервер в другом пакете. Итак, как мы видим, он разделил партии.

АНИЛ КУМАР
источник
5
Use herDatabase
GO ; 

Код говорит, чтобы выполнить инструкции над GOмаркером. Моя база данных по умолчанию - myDatabase, поэтому вместо использования myDatabase GOи делает текущий запрос для использования herDatabase

TonyP
источник
-8

Здесь магия GO.

SELECT 'Go'
Go 10

Синтаксис: Go INT(BatchNumber)

Серийный номер: не произошло ни одного раза

Выглядит просто, это может привести вас к спагетти, если вы будете кодировать глубже.

Ragul
источник
это попытка объяснить оператор GOTO, используемый в программировании (я думаю), как пакетные сценарии ... не имеет ничего общего с оператором GO в SQL Server. GO обычно не используется с INT, хотя вы можете это сделать, если хотите обработать партию N раз ... так что нет, это не "магия" GO. Он используется для разделения сценария на серию сгруппированных исполнений, как объяснено в других ответах.
Хериберто Луго