SQL Server: Нужно ли использовать команды GO между партиями?

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

Ответы

Ответ 1

Они не являются строго обязательными - это всего лишь инструкции для 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

Результаты в:

Msg 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 вряд ли когда-либо понадобится.

Ответ 2

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

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