Бөлісу құралы:


Пакеты инструкций 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 один раз для каждого набора параметров. Дополнительные сведения см. в разделе "Параметры инструкции " и "Массивы значений параметров" далее в этой статье.

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