Что такое go в sql
Перейти к содержимому

Что такое go в sql

  • автор:

Инструкции служебных программ SQL Server — GO

В SQL Server предоставляются команды, которые не являются инструкциями Transact-SQL, но распознаются программами sqlcmd и osql, а также редактором кода в среде SQL Server Management Studio. Эти команды используются для повышения удобочитаемости и упрощения выполнения пакетов и скриптов.

GO информирует программы SQL Server об окончании пакета инструкций Transact-SQL.

Синтаксис

GO [count] 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

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

Замечания

GO — это не инструкция Transact-SQL; это команда, распознаваемая программами sqlcmd и osql, а также редактором кода среды SQL Server Management Studio.

Программы SQL Server интерпретируют команду GO как сигнал о том, что им следует отправить текущий пакет инструкций Transact-SQL экземпляру SQL Server. Текущий пакет инструкций состоит из всех инструкций, введенных за время, прошедшее с момента обработки последней команды GO, или, если данная команда GO является первой, с момента начала нерегламентированного сеанса или скрипта.

Инструкция Transact-SQL не может располагаться на той же строке, что и команда GO. Тем не менее строка с командой GO может содержать комментарии.

При использовании команды GO нужно соблюдать требования, предъявляемые к пакетам. Например, при любом вызове хранимой процедуры после первой инструкции пакета нужно использовать ключевое слово EXECUTE. Область видимости локальных (пользовательских) переменных ограничена пакетом, и к ним нельзя обращаться после команды GO.

USE AdventureWorks2022; GO DECLARE @MyMsg VARCHAR(50) SELECT @MyMsg = 'Hello, World.' GO -- @MyMsg is not valid after this GO ends the batch. -- Yields an error because @MyMsg not declared in this batch. PRINT @MyMsg GO SELECT @@VERSION; -- Yields an error: Must be EXEC sp_who if not first statement in -- batch. sp_who GO 

Приложения SQL Server могут отправлять экземпляру Transact-SQL множественные инструкции SQL Server, чтобы они были выполнены как пакет. Инструкции пакета компилируются в единый план выполнения. Программисты, выполняющие в программах SQL Server нерегламентированные инструкции или составляющие из инструкций Transact-SQL скрипты для программ SQL Server, используют команду GO как сигнал об окончании пакета.

Приложения, основанные на API-интерфейсах ODBC или OLE DB, при попытке выполнить команду GO получают уведомление о синтаксической ошибке. Служебные программы SQL Server никогда не отправляют команду GO на сервер.

Не используйте точку с запятой в качестве признака конца инструкции после команды GO.

-- Yields an error because ; is not permitted after GO SELECT @@VERSION; GO; 

В редакторе запросов SQL на портале Microsoft Fabric каждая инструкция SQL выполняется как независимый сеанс. Контекст сеанса не сохраняется в инструкциях SQL. Дополнительные сведения см. в редакторе sql-запросов.

Разрешения

Для выполнения команды GO не требуются какие-либо разрешения. Она может быть выполнена любым пользователем.

Примеры

В следующем примере создаются два пакета. Первый содержит только инструкцию USE AdventureWorks2022 , которая задает контекст базы данных. Остальные инструкции выполняют те или иные операции над локальной переменной и должны быть сгруппированы в один пакет. Поэтому следующая команда GO указывается только после последней инструкции, в которой используется переменная.

USE AdventureWorks2022; GO DECLARE @NmbrPeople INT SELECT @NmbrPeople = COUNT(*) FROM Person.Person; PRINT 'The number of people as of ' + CAST(GETDATE() AS CHAR(20)) + ' is ' + CAST(@NmbrPeople AS CHAR(10)); GO 

В следующем примере инструкции в пакете выполняются дважды.

SELECT DB_NAME(); SELECT USER_NAME(); GO 2 

Для чего нужна инструкция GO в MS SQL и как правильно отделать и использовать пакеты?

Единственное, что я понял — в отдельные пакеты нужно выносить создание некоторых объектов БД(процедуры, представления, функции итд.) Но что вообще является пакетом, как их грамотно использовать и когда так не и не понял.

Отслеживать
задан 30 янв в 11:58
Apostol Petr Apostol Petr
317 1 1 серебряный знак 6 6 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

В-принципе, насколько я понял идею команды GO .

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

Такие отдельные команды называются пакетами

На практике GO наоборот «мешает» и лучше его не использовать, но можно выделить несколько причин для использования этой команды

  1. Некоторые инструкции (например USE ) весьма странно работают без GO после них. Соответственно, здесь необходимо их использование
  2. Синтаксис некоторых инструкций требует того, чтобы она была единственной в пакете . Без GO ничего просто не запустится
  3. GO поддерживает параметр count , определяющий какое кол-во раз нужно выполнить пакет. Если вам нужно выполнить какой-то пакет несколько раз, то можно просто написать инструкции и потом GO count

Изучение SQL: ключевое слово GO

SQL позволяет объединять несколько команд в один пакет, который будет выполняться вместе и представлять одно целое. В качестве сигнала завершения пакета и его выполнения служит команда GO. Смысл в том, что одни команды должны выполниться после выполнения предыдущих. Тем самым мы можем строить последовательность команд.

Например, создание БД и добавления в нее таблиц:

CREATE DATABASE TestDB GO USE TestDB CREATE TABLE Users ( Id uniqueidintefier PRIMARY KEY IDENTITY, FirstName varchar(50) NOT NULL )

Разница и случаи использования GO и ; в SQL Server

GO подает сигнал SQL Server Management Studio (SSMS) и другим подобным утилитам о завершении блока команд T-SQL и необходимости его исполнить. Отметим, что GO — это не часть синтаксиса языка T-SQL. В свою очередь, ; применяется как разделитель между инструкциями T-SQL. Это очень важно особенно перед определением общих табличных выражений (Common Table Expressions, CTE), помогает избежать двусмысленности при интерпретации кода.

Скопировать код

-- Создаём процедуру, заключая её в отдельный пакет CREATE PROCEDURE ResetTable AS TRUNCATE TABLE Employee; GO -- Пакет выполнен, можно переходить к следующему -- Начинаем следующий пакет кода, в его контексте предыдущие переменные и временные таблицы уже не доступны SET NOCOUNT ON; -- Перед CTE требуется разделитель — точка с запятой ;WITH Archived AS ( SELECT * FROM EmployeeArchive ) SELECT * FROM Archived;

Краткий обзор:

  • GO : контролирует область видимости и порядок исполнения в рамках пакетов.
  • ; : делает синтаксис яснее и точнее, бесценен при использовании CTE.
  • Эти элементы помогут навести порядок в вашем коде, так же, как органайзеры помогают поддерживать порядок в шкафу.

Более подробно о GO и точке с запятой

Управление SQL-скриптами с помощью «GO»

  • Изоляция пакетами: GO гарантирует автономность каждого пакета кода.
  • Разграничение области видимости: GO контролирует видимость переменных и временных таблиц, предотвращая ошибки при их использовании.
  • Структурирование DDL-скриптов: GO обязателен при формировании скриптов создания или модификации объектов базы данных.

«;»: для гарантии чёткости и следования стандартам

  • Разделение инструкций: ; служит «разделителем» между командами T-SQL, упрощая их восприятие.
  • Соблюдение стандартов SQL: Хотя использование ; не всегда является обязательным, это соответствует международным стандартам SQL.
  • Синтаксическая необходимость: Без ; невозможно написать CTE или MERGE корректно.

Готовность к будущим версиям SQL Server

  • Изменение правил в будущем: Есть информация о том, что в будущих версиях SQL Server, точка с запятой станет обязательным элементом в коде.

Эффективное решение задач с помощью «;» и «GO»

  • Чистота синтаксиса: Сложные запросы становятся понятнее с использованием разделителя.
  • Разделение на пакеты: GO ясно делит код на пакеты, предупреждая ошибки в размещении CREATE PROCEDURE .
  • Управление памятью: Использование GO способствует корректной работе скриптов и может снижать издержки памяти.

Визуализация

GO и ; в SQL Server можно сравнить с регуляторами движения на перепутанных дорогах.��

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *