Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL analytics endpoint в Microsoft Fabric
Warehouse в Microsoft Fabric
SQL база данных в Microsoft Fabric
В SQL Server предоставляются команды, которые не являются инструкциями Transact-SQL, но распознаются программами sqlcmd и osql, а также редактором кода в среде SQL Server Management Studio. Эти команды используются для повышения удобочитаемости и упрощения выполнения пакетов и скриптов.
GO информирует программы SQL Server об окончании пакета инструкций Transact-SQL.
Соглашения о синтаксисе Transact-SQL
Syntax
GO [count]
Arguments
count
Целое положительное число. Пакет, предшествующий команде GO, будет выполняться заданное количество раз.
Remarks
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-запросов.
Permissions
Для выполнения команды GO не требуются какие-либо разрешения. Она может быть выполнена любым пользователем.
Examples
В следующем примере создаются два пакета. Первый содержит только инструкцию 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