Especificando lotes

Lotes são implementados como parte de APIs de banco de dados.

  • No ADO, um lote é a cadeia de caracteres de instruções Transact-SQL incluída na propriedade CommandText de um objeto 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
    
  • No OLE DB, um lote é uma cadeia de instruções Transact-SQL incluída na cadeia usada para definir o texto de comando:

    WCHAR* wszSQLString =
    L"SELECT * FROM HumanResources.Employee; SELECT * FROM Production.Product";
    hr = pICommandText->SetCommandText
          (DBGUID_DBSQL, wszSQLString)
    
  • No ODBC, um lote é a cadeia de caracteres de instruções Transact-SQL incluída em uma chamada SQLPrepare ou SQLExecDirect:

    SQLExecDirect(hstmt1,
       "SELECT * FROM HumanResources.Employee; SELECT * FROM Production.Product",
    SQL_NTS):
    

Algumas ferramentas de acesso a dados, como o Microsoft Access, não têm um terminador de lote explícito.#

O comando GO

O Microsoft SQL Server Management Studio, o utilitário sqlcmd e o utilitário osql usam o comando GO para sinalizar o final do lote. O GO não é uma instrução Transact-SQL; simplesmente sinaliza aos utilitários quantas instruções SQL devem ser incluídas em um lote. No SQL Server Management Studio e osql, são dadas todas as instruções Transact-SQL de um comando GO para o próximo, na cadeia enviada a SQLExecDirect.

Por exemplo, se estas instruções forem executadas no SQL Server Management Studio:

SELECT @@VERSION
SET NOCOUNT ON
GO

O SQL Server Management Studio faz o equivalente a:

SQLExecDirect(hstmt,
"SELECT @@VERSION SET NOCOUNT ON",
SQL_NTS);

Como um lote é compilado em um único plano de execução, o lote deve ser logicamente completo. O plano de execução criado para um lote não tem capacidade de referenciar qualquer variável declarada em outro lote. Comentários devem tanto começar como terminar em um lote.