В чем смысл GO-оператора в TSQL - PullRequest
19 голосов
/ 25 мая 2010

Я новичок в TSQL, и мне интересно, что на самом деле означает выражение GO. Мне это кажется просто добавленным туда, где это кажется подходящим.

Я полагаю, это как-то говорит серверу sql запустить предыдущее утверждение? Что произойдет, если вы их вообще не используете? Может ли кто-нибудь привести пример, где оператор будет ломаться, если я не использую GO.

Пожалуйста, уточните.

Ответы [ 3 ]

14 голосов
/ 25 мая 2010

Это пакетный терминатор

это сломается

declare @i int
set @i =5

declare @i int
set @i =6

Select @i

Сообщение 134, Уровень 15, Состояние 1, Строка 5 Имя переменной '@i' уже объявлено. Имена переменных должны быть уникальными в пакете запроса или хранимой процедуре.

это будет работать

declare @i int
set @i =5

go
declare @i int
set @i =6

Select @i
10 голосов
/ 25 мая 2010

Конец партии.

Это редко требуется и используется гораздо чаще, чем следует. Одно из допустимых мест - программирование хранимых процедур, где вы сначала проверяете, существует ли процедура, и удаляете ее, если ее нет. Затем вы используете оператор go для завершения пакета, потому что оператор create proc должен быть первым оператором пакета.

6 голосов
/ 25 мая 2010

Кстати. На самом деле это не команда TSQL. Он используется только инструментами Microsoft DB для разделения двух пакетов команд.

На самом деле вы можете настроить его как другое слово в SSMS, если вы хотите в настройке параметра Разделение Optionss..Batch.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...