SQL 문의 일괄 처리

SQL 문의 일괄 처리는 둘 이상의 SQL 문 그룹 또는 둘 이상의 SQL 문 그룹과 동일한 효과가 있는 단일 SQL 문 그룹입니다. 일부 구현에서는 결과를 사용할 수 있기 전에 전체 일괄 처리 문이 실행됩니다. 네트워크 트래픽을 줄일 수 있고 데이터 원본이 SQL 문 일괄 처리를 최적화할 수 있기 때문에 문을 별도로 제출하는 것보다 더 효율적인 경우가 많습니다. 다른 구현에서 SQLMoreResults를 호출하면 일괄 처리에서 다음 명령문의 실행이 트리거됩니다. ODBC는 다음과 같은 유형의 일괄 처리를 지원합니다.

  • 명시적 일괄 처리명시적 일괄 처리 는 세미콜론(;))으로 구분된 둘 이상의 SQL 문입니다. 예를 들어 다음 SQL 문 일괄 처리는 새 판매 주문을 엽니다. 이렇게 하려면 Orders 테이블과 줄 테이블에 행을 삽입해야 합니다. 마지막 문 후에는 세미콜론이 없습니다.

    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 문의 일괄 처리입니다. CREATE PROCEDURE 문은 SQL Server와 관련이 있고 SQL Server는 CREATE PROCEDURE 문에서 여러 문을 구분할 필요가 없으므로 두 SELECT 문을 구분하는 세미콜론이 없습니다.

  • 매개 변수 배열의 매개 변수 배열은 대량 작업을 수행하는 효과적인 방법으로 매개 변수가 있는 SQL 문과 함께 사용할 수 있습니다. 예를 들어 매개 변수 배열을 다음 INSERT 문과 함께 사용하여 단일 SQL 문만 실행하는 동안 여러 행을 Lines 테이블에 삽입할 수 있습니다.

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

    데이터 원본이 매개 변수 배열을 지원하지 않는 경우 드라이버는 각 매개 변수 집합에 대해 SQL 문을 한 번 실행하여 에뮬레이트할 수 있습니다. 자세한 내용은 이 섹션의 뒷부분에 있는 문 매개 변수매개 변수 값 배열을 참조하세요.

서로 다른 유형의 일괄 처리는 상호 운용 가능한 방식으로 혼합할 수 없습니다. 즉, 애플리케이션이 프로시저 호출, 매개 변수 배열을 사용하는 명시적 일괄 처리 및 매개 변수 배열을 사용하는 프로시저 호출이 포함된 명시적 일괄 처리를 실행한 결과를 결정하는 방법은 드라이버별로 다릅니다.

이 섹션에서는 다음 항목을 다룹니다.