У чому полягає використання GO у студії управління SQL Server & Transact SQL?


363

Студія управління SQL Server завжди вставляє команду GO, коли я створюю запит, використовуючи правою кнопкою миші меню "Сценарій як". Чому? Що насправді робить GO?



29
@ChrisF - це не дублікат, хоча прийнята відповідь також відповідає на це запитання. Це питання стосується використання "GO" для транзакції - просто виявляється, що це зовсім не команда SQL. Це питання є набагато більш загальним і намагається дати остаточну відповідь на запитання про команду GO у SSMS.
tvanfosson

3
Подивіться також за цим посиланням: для чого корисні групові заяви?
Zain Rizvi

Документація Майкрософт: Заяви про утиліти SQL Server - GO : Пакет, що передує GO, виконає вказану кількість разів.
хвилини

Відповіді:


304

Це пакетний термінатор, але ви можете змінити його на все, що завгодно alt текст


80
gbn зробіть це ВИБІР і подивіться, що станеться :-)
SQLMenace

14
Дякую! Однак у чому тоді суть заяви GO? Це може здатися дурним, але що означає "пакет коду"? msdn каже, що після GO термін служби змінних закінчується. Звучить нічого спільного з правом зобов'язань щодо транзакцій? Чи є обставини, коли я повинен зберігати заяву GO у своїх сценаріях?
kate1138

4
Це означає, що всі T-SQL до нього будуть виконуватись "відразу". Як я розумію, він є взаємозамінним крапкою з комою (OLEDB / Oracle). Наприклад, якщо у вас великий сценарій після розгортання, оператор GO між рядками може допомогти пам'яті, що використовується в сценарії.
Ентоні Мейсон

4
Ця відповідь насправді не пояснює "що це насправді робить" чи чому
Андрій

Прочитавши відповідь @tvanfosson: Це дійсно взаємозамінна з крапкою з комою?
WoIIe

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 .... Чому?". Здається, більшість часу, від страху. Єдиний раз, коли це потрібно, коли команда повинна бути у власній партії.
bielawski

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

SYNTAX: Ідіть INT(BatchNumber)

Серійний номер: жодного разу не траплялося

Виглядає просто, це може привести вас до спагетті, якщо ви кодуєте глибше.


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