Partilhar via


Lotes de instruções SQL

Um lote de instruções SQL é um grupo de duas ou mais instruções SQL ou uma única instrução SQL que tem o mesmo efeito que um grupo de duas ou mais instruções SQL. Em algumas implementações, toda a instrução batch é executada antes de quaisquer resultados estarem disponíveis. Isto é frequentemente mais eficiente do que submeter instruções separadamente, porque o tráfego de rede pode ser reduzido e a fonte de dados pode, por vezes, otimizar a execução de um lote de instruções SQL. Noutras implementações, chamar SQLMoreResults desencadeia a execução da próxima instrução no lote. O ODBC suporta os seguintes tipos de lotes:

  • Lotes Explícitos Um batch explícito são duas ou mais instruções SQL separadas por ponto e vírgula (;). Por exemplo, o seguinte lote de instruções SQL abre uma nova ordem de venda. Isto requer inserir linhas tanto nas tabelas de Ordens como de Linhas. Note que não há ponto e vírgula após a última afirmação.

    INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)  
       VALUES (2002, 1001, {fn CURDATE()}, 'Garcia', 'OPEN');  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 1, 1234, 10);  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 2, 987, 8);  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 3, 566, 17);  
    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (2002, 4, 412, 500)  
    
  • Procedimentos Se um procedimento contiver mais do que uma instrução SQL, é considerado um lote de instruções SQL. Por exemplo, a seguinte instrução específica do SQL Server cria um procedimento que devolve um conjunto de resultados contendo informações sobre um cliente e um conjunto de resultados que lista todas as ordens de venda abertas para esse cliente:

    CREATE PROCEDURE GetCustInfo (@CustomerID INT) AS  
       SELECT * FROM Customers WHERE CustID = @CustomerID  
       SELECT OrderID FROM Orders  
          WHERE CustID = @CustomerID AND Status = 'OPEN'  
    

    A instrução CREATE PROCEDURE em si não é um conjunto de instruções SQL. No entanto, o procedimento que cria é um lote de instruções SQL. Não há ponto e vírgula a separar as duas instruções SELECT porque a instrução CREATE PROCEDURE é específica do SQL Server, e o SQL Server não requer pontos e vírgulas para separar múltiplas instruções numa instrução CREATE PROCEDURE .

  • Arrays de parâmetros Arrays de parâmetros podem ser usados com uma instrução SQL parametrizada como forma eficaz de realizar operações em massa. Por exemplo, arrays de parâmetros podem ser usados com a seguinte instrução INSERT para inserir múltiplas linhas na tabela Lines executando apenas uma única instrução SQL:

    INSERT INTO Lines (OrderID, Line, PartID, Quantity)  
       VALUES (?, ?, ?, ?)  
    

    Se uma fonte de dados não suportar arrays de parâmetros, o driver pode emulá-los executando a instrução SQL uma vez para cada conjunto de parâmetros. Para mais informações, consulte Parâmetros da Instrução e Matrizes de Valores de Parâmetro, mais adiante nesta secção.

Os diferentes tipos de lotes não podem ser misturados de forma interoperável. Ou seja, a forma como uma aplicação determina o resultado da execução de um batch explícito que inclui chamadas de procedimento, um batch explícito que usa arrays de parâmetros, e uma chamada de procedimento que usa arrays de parâmetros é específica do driver.

Esta seção contém os seguintes tópicos.