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 MicrosoftSQL 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.