Задание пакетов
Пакеты реализованы как часть API базы данных.
В ADO пакет представляет собой строку инструкций Transact-SQL, заключенную в свойстве CommandText объекта Command:
Dim Cmd As New ADODB.Command Set Cmd.ActiveConnection = Cn Cmd.CommandText = "SELECT * FROM Purchasing.Vendor; SELECT * FROM Production.Product" Cmd.CommandType = adCmdText Cmd.Execute
В OLE DB пакет — это строка инструкций Transact-SQL, заключенная в строку, которая используется для задания текста команды:
WCHAR* wszSQLString = L"SELECT * FROM HumanResources.Employee; SELECT * FROM Production.Product"; hr = pICommandText->SetCommandText (DBGUID_DBSQL, wszSQLString)
В ODBC пакет представляет собой строку инструкций Transact-SQL, заключенную в вызове SQLPrepare или SQLExecDirect:
SQLExecDirect(hstmt1, "SELECT * FROM HumanResources.Employee; SELECT * FROM Production.Product", SQL_NTS):
В некоторых средствах доступа к данным, таких как доступ Microsoft Access, нет явного признака конца пакета.
Команда GO
Среда MicrosoftSQL Server Management Studio, программа sqlcmd и программа osql используют команду GO для обозначения конца пакета. GO — это не инструкция Transact-SQL; она просто говорит программам, сколько инструкций SQL должно быть включено в пакет. В среде SQL Server Management Studio и в программе osql все инструкции Transact-SQL от одной команды GO до следующей команды помещаются в строку, отправляемую SQLExecDirect.
Например, если эти инструкции выполняются в среде SQL Server Management Studio:
SELECT @@VERSION
SET NOCOUNT ON
GO
Среда SQL Server Management Studio делает то же самое, что:
SQLExecDirect(hstmt,
"SELECT @@VERSION SET NOCOUNT ON",
SQL_NTS);
Поскольку пакет компилируется в один план выполнения, он должен быть логически завершен. План выполнения, созданный для одного пакета, не может ссылаться ни на какие переменные, объявленные в другом пакете. Начинаться и завершаться пакет должен комментариями.