Примеры пакетных заданий
Эти примеры — сценарии, которые используют редактор кода среды Microsoft SQL Server Management Studio и команду GO программы sqlcmd, чтобы задать границы пакетов.
В следующем примере создается представление. Так как инструкция CREATE VIEW должна быть единственной в пакете, требуются команды GO, чтобы изолировать инструкцию CREATE VIEW от предшествующей и последующей инструкций USE и SELECT.
USE AdventureWorks;
GO
CREATE VIEW dbo.vProduct
AS
SELECT ProductNumber, Name
FROM Production.Product;
GO
SELECT *
FROM dbo.vProduct;
GO
В следующем примере показано, как несколько пакетов сочетаются в одной транзакции. Инструкции BEGIN TRANSACTION и COMMIT разделяют границы транзакций. Инструкции BEGIN TRANSACTION, USE, CREATE TABLE, SELECT и COMMIT находятся каждая в собственном пакете, состоящем из одной инструкции. Все инструкции INSERT включены в один пакет.
BEGIN TRANSACTION
GO
USE AdventureWorks;
GO
CREATE TABLE dbo.mycompanies
(
id_num int IDENTITY(100, 5),
company_name nvarchar(100)
)
GO
INSERT mycompanies (company_name)
VALUES (N'A Bike Store');
INSERT mycompanies (company_name)
VALUES (N'Progressive Sports');
INSERT mycompanies (company_name)
VALUES (N'Modular Cycle Systems');
INSERT mycompanies (company_name)
VALUES (N'Advanced Bike Components');
INSERT mycompanies (company_name)
VALUES (N'Metropolitan Sports Supply');
INSERT mycompanies (company_name)
VALUES (N'Aerobic Exercise Company');
INSERT mycompanies (company_name)
VALUES (N'Associated Bikes');
INSERT mycompanies (company_name)
VALUES (N'Exemplary Cycles');
GO
SELECT id_num, company_name
FROM dbo.mycompanies
ORDER BY company_name ASC;
GO
COMMIT;
GO
Следующий сценарий иллюстрирует две проблемы. Во-первых, переменная @MyVar объявлена во втором пакете, а вызывается в третьем. К тому же, во втором пакете есть начало комментария, но нет конца. В третьем пакете содержится конец комментария, но когда программа sqlcmd считывает команду GO, она отправляет первый пакет Microsoft SQL Server 2005, где комбинация символов «/*» без соответствующей ей комбинации «*/» порождает синтаксическую ошибку.
USE AdventureWorks;
GO
DECLARE @MyVar INT
/* Start of the split comment.
GO
End of the split comment. */
SELECT @MyVar = 29;
GO