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


Пакеты инструкций SQL

Пакет инструкций SQL — это группа двух или более инструкций SQL или одной инструкции SQL, которая имеет тот же эффект, что и группа двух или более инструкций SQL. В некоторых реализациях весь пакетный оператор выполняется до того, как будут доступны результаты. Это часто более эффективно, чем отправка инструкций отдельно, так как сетевой трафик часто может быть сокращен, а источник данных иногда может оптимизировать выполнение пакета инструкций SQL. В других реализациях вызов SQLMoreResults активирует выполнение следующей инструкции в пакете. ODBC поддерживает следующие типы пакетов:

  • Явные пакетные службыэто две или несколько инструкций SQL, разделенных точкой с запятой (;). Например, следующий пакет инструкций SQL открывает новый заказ на продажу. Для этого требуется вставка строк в таблицы "Заказы" и "Строки". Обратите внимание, что после последней инструкции нет точки с запятой.

    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)  
    
  • Процедуры , если процедура содержит несколько инструкций SQL, она считается пакетом инструкций SQL. Например, следующая инструкция SQL Server создает процедуру, которая возвращает результирующий набор, содержащий сведения о клиенте и результирующий набор, в котором перечислены все открытые заказы на продажу для этого клиента:

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

    Сама инструкция CREATE PROCEDURE не является пакетом инструкций SQL. Однако созданная процедура представляет собой пакет инструкций SQL. С запятой не разделены две инструкции SELECT, так как инструкция CREATE PROCEDURE относится к SQL Server, и SQL Server не требует запятой для разделения нескольких инструкций в инструкции CREATE PROCEDURE.

  • Массивы массивов параметров можно использовать с параметризованной инструкцией SQL в качестве эффективного способа выполнения массовых операций. Например, массивы параметров можно использовать со следующей инструкцией INSERT для вставки нескольких строк в таблицу Строк при выполнении только одной инструкции SQL:

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

    Если источник данных не поддерживает массивы параметров, драйвер может эмулировать их, выполнив инструкцию SQL один раз для каждого набора параметров. Дополнительные сведения см. в разделе "Параметры оператора" и "Массивы значений параметров" далее в этом разделе.

Различные типы пакетов не могут быть смешанными в взаимодействии. То есть, как приложение определяет результат выполнения явного пакета, включающего вызовы процедур, явный пакет, использующий массивы параметров, и вызов процедуры, использующий массивы параметров, является драйвером.

Этот раздел содержит следующие подразделы.