Published on

May 10, 2021

Понимание команды SQL Server GO

Если вы новичок в SQL Server и столкнулись с командой GO в скрипте T-SQL, вам может быть интересно, для чего она используется. В этой статье мы объясним, что такое команда SQL GO, когда ее следует использовать, и предоставим несколько советов по ее эффективному использованию.

Краткая история команды SQL GO

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

Что такое команда SQL GO?

Команда GO сама по себе не является оператором T-SQL, а является командой, распознаваемой средствами нативного SQL Server, такими как SSMS, SQLCMD и OSQL. Она часто используется в коде T-SQL для разделения пакетов. При использовании инструментов, таких как SQLCMD или OSQL, необходимо включить команду GO, чтобы указать конец пакета и позволить его выполнение.

Например, рассмотрим следующий запрос T-SQL, который извлекает список баз данных:

SELECT name FROM sys.databases
GO

В этом случае команда GO необходима для информирования инструмента SQLCMD или OSQL о том, что запрос завершен и готов к выполнению.

Синтаксис команды SQL GO

Синтаксис команды GO выглядит следующим образом:

GO [число]

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

Например, следующий пример вставит данные в таблицу 5 раз:

INSERT INTO dbo.vote (result) VALUES ('President')
GO 5

Различия между точкой с запятой и командой SQL GO

Хотя и точка с запятой, и команда GO могут использоваться для разделения операторов, они выполняют разные функции. Точка с запятой используется для разделения отдельных операторов внутри пакета, в то время как команда GO используется для разделения пакетов.

Существуют определенные сценарии, где точка с запятой обязательна, например, в выражениях общей таблицы (CTE) или операторах объединения (Merge). С другой стороны, команда GO часто используется с операторами SET, такими как SET QUOTED_IDENTIFIER.

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

Использование команды SQL GO в SSMS

В SQL Server Management Studio (SSMS) команда GO используется по умолчанию для разделения пакетов. Однако, если вы предпочитаете другой разделитель, вы можете настроить его. Для этого перейдите в меню Инструменты > Параметры, перейдите в раздел Выполнение запроса и найдите опцию Разделитель пакета. Здесь вы можете указать свой предпочтительный разделитель.

Команда GO особенно полезна в SSMS, когда у вас есть несколько операторов для выполнения. Например, вы не можете создать несколько хранимых процедур без использования команды GO. Попытка сделать это приведет к ошибке:

CREATE PROCEDURE p1 AS SELECT 'first stored procedure'
CREATE PROCEDURE p1 AS SELECT 'second stored procedure'

Сообщение об ошибке будет гласить: “Неверный синтаксис. CREATE PROCEDURE должен быть единственным оператором в пакете.” Чтобы исправить эту проблему, вы можете использовать команду GO для выполнения двух пакетов отдельно:

CREATE PROCEDURE p1 AS SELECT 'first stored procedure'
GO
CREATE PROCEDURE p2 AS SELECT 'second stored procedure'

Еще одно распространенное использование команды GO – переключение на другую базу данных. Например, если вы находитесь в базе данных AdventureWorks и хотите переключиться на базу данных Northwind, вы можете использовать следующий синтаксис:

USE Northwind
GO

Заключение

В этой статье мы рассмотрели команду SQL GO и ее различные варианты использования. Мы узнали, что команда GO используется для разделения пакетов в коде T-SQL и распознается средствами SQL Server, такими как SSMS, SQLCMD и OSQL. Мы также обсудили различия между точкой с запятой и командой GO, а также способы настройки разделителя пакета в SSMS. Понимая назначение и синтаксис команды GO, вы можете эффективно организовывать и выполнять свои скрипты SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.