Я бы хотел разобраться с этим, потому что это меня смущает. Может кто-нибудь объяснить, когда я должен использовать оператор GO в моих сценариях?
Насколько я понимаю, оператор GO не является частью языка T-SQL, вместо этого он используется для отправки пакета операторов на SQL-сервер для обработки.
Когда я запускаю следующий скрипт в Query Analyzer, он работает нормально. Затем я закрываю окно, и оно отображает предупреждение:
«Есть незафиксированные транзакции. Вы хотите зафиксировать эти транзакции перед закрытием окна?»
BEGIN TRANSACTION;
GO
ALTER PROCEDURE [dbo].[pvd_sp_job_xxx]
@jobNum varchar(255)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
COMMIT TRANSACTION;
GO
Однако, если я добавлю GO в конце инструкции ALTER, все будет в порядке (как показано ниже). Как так?
BEGIN TRANSACTION;
GO
ALTER PROCEDURE [dbo].[pvd_sp_xxx]
@jobNum varchar(255)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
GO
COMMIT TRANSACTION;
GO
Я думал об удалении всех GO, но потом жалуется, что оператор процедуры alter должен быть первым оператором внутри пакета запроса? Это просто требование, которого я должен придерживаться?
Это кажется странным, потому что, если я НАЧИНАЮ ТРАНЗАКЦИЮ и ИДЕМ .... этот оператор отправляется на сервер для обработки, и я начинаю транзакцию.
Далее следуют процедура ALTER, COMMIT TRANSACTION и GO (таким образом, отправляя эти операторы на сервер для обработки с коммитом для завершения транзакции, начатой ранее), почему он жалуется, когда я все еще закрываю окно? Конечно, я убедился, что оператор alter-процедуры является первым в пакете. Почему он жалуется на незафиксированные транзакции?
Любая помощь будет наиболее ценится!