Поделиться через


Задание пакетов

Пакеты реализованы как часть 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);

Поскольку пакет компилируется в один план выполнения, он должен быть логически завершен. План выполнения, созданный для одного пакета, не может ссылаться ни на какие переменные, объявленные в другом пакете. Начинаться и завершаться пакет должен комментариями.