SQL Server: нужно ли использовать операторы GO между партиями? - PullRequest
15 голосов
/ 02 октября 2010

Я видел, как люди используют оператор GO между пакетами кода SQL, но AFAICS это не обязательно (SQL Server 2008). Каковы преимущества использования операторов GO между пакетами / наборами операторов SQL?

Ответы [ 2 ]

28 голосов
/ 02 октября 2010

Они не являются строго обязательными - это всего лишь инструкции для SQL Server Management Studio для выполнения инструкций до этого момента, а затем продолжают работу. GO - это , а не - ключевое слово T-SQL или что-то еще - это просто инструкция, которая работает в SSMS.

Иногда вам нужно GO - например, если вы добавляете столбец в таблицу, а затем хотите выбрать его снова, вам необходимо выполнить GO между добавлением столбца и запросом к нему.

например. если вы попытаетесь выполнить это, вы получите ошибки от SSMS:

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5

Результаты:

Сообщение 207, Уровень 16, Состояние 1, Строка 9 Неверное имя столбца 'datetimestamp'.

Дело в том, что SSMS пытается проверить весь оператор сразу, но в операторе SELECT он будет жаловаться на отсутствующий столбец DateTimeStamp.

ALTER TABLE (sometable) ADD DateTimeStamp DATETIME
GO       

SELECT ID, DateTimeStamp FROM (sometable) WHERE ID > 5

Если вы поместите GO между двумя операторами, это сработает, потому что SSMS не будет анализировать и проверять весь оператор заранее - он выполнит первую часть, а затем только парсит вторую (после GO).

Но кроме таких ситуаций, GO вряд ли когда-либо понадобится.

0 голосов
/ 02 октября 2010

В инструментах SQL обязательно указывать SSMS, где начинается и заканчивается пакет. Это также требуется для некоторых операторов, таких как CREATE TRIGGER, которые должны быть первыми в пакете

Например, в вызове c # к SQL Server это не имеет значения

...