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


363

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



29
@ChrisF - это не дубликат, хотя принятый ответ также отвечает на этот вопрос. Этот вопрос касается использования «GO» в транзакции - просто выясняется, что на самом деле это вообще не команда SQL. Этот вопрос гораздо более общий и пытается дать окончательный ответ на вопросы о команде GO в SSMS.
tvanfosson

3
Также взгляните на эту ссылку: для чего нужны операторы пакетной обработки?
Заин Ризви,

Документация Microsoft: заявления утилит SQL Server - GO : Пакет, предшествующий GO, будет выполняться указанное количество раз.
мин

Ответы:


304

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


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раз .


199

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

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

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


37
В какой ситуации пакетирование вещей GOдействительно полезно?
nicodemus13


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


-8

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

SELECT 'Go'
Go 10

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

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

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


это попытка объяснить оператор GOTO, используемый в программировании (я думаю), как пакетные сценарии ... не имеет ничего общего с оператором GO в SQL Server. GO обычно не используется с INT, хотя вы можете это сделать, если хотите обработать партию N раз ... так что нет, это не "магия" GO. Он используется для разделения сценария на серию сгруппированных исполнений, как объяснено в других ответах.
Хериберто Луго
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.