일괄 처리

일괄 처리는 실행을 위해 응용 프로그램에서 SQL Server로 동시에 전송된 하나 이상의 Transact-SQL 문 그룹입니다. SQL Server에서는 일괄 처리에 포함된 여러 개의 문을 실행 계획이라고 하는 단일 실행 단위로 컴파일합니다. 실행 계획에 있는 문은 한 번에 하나씩 실행됩니다.

각 Transact-SQL 문은 세미콜론으로 종료해야 합니다. 이 요구 사항을 반드시 지켜야 하는 것은 아니지만 각 문을 세미콜론 없이 종료하는 기능은 더 이상 사용되지 않으며 MicrosoftSQL Server의 이후 버전에서는 제거됩니다.

구문 오류와 같은 컴파일 오류가 발생하면 실행 계획이 컴파일되지 않고 일괄 처리에 있는 모든 문이 실행되지 않습니다.

산술 오버플로 또는 제약 조건 위반과 같은 런타임 오류가 발생하면 다음 결과 중 하나가 나타납니다.

  • 대부분의 런타임 오류는 일괄 처리에서 현재 문과 그 뒤에 나오는 문을 중지합니다.

  • 제약 조건 위반과 같은 몇 가지 런타임 오류는 현재 문만 중지합니다. 일괄 처리에 있는 나머지 문은 모두 실행됩니다.

런타임 오류가 발생한 문 전에 실행된 문은 영향을 받지 않습니다. 단, 일괄 처리가 트랜잭션에 있고 오류에 의해 트랜잭션이 롤백될 때는 예외입니다. 이 경우, 런타임 오류 전에 커밋되지 않은 데이터 수정은 롤백됩니다.

예를 들어 일괄 처리에 10개의 문이 있다고 가정합니다. 5번째 문에 구문 오류가 있으면 일괄 처리에 있는 모든 문이 실행되지 않습니다. 일괄 처리가 컴파일되었는데 실행 중에 두 번째 문이 실패하면 첫 번째 문은 이미 실행되었으므로 영향을 받지 않습니다.

SQL Server에서는 문 수준의 다시 컴파일 기능을 제공합니다. 즉, 문에서 다시 컴파일을 트리거하면 전체 일괄 처리가 아닌 해당 문만 다시 컴파일됩니다. 이 기능은 SQL Server 2000과 구별되는 기능입니다. CREATE TABLE 문과 4개의 INSERT 문이 하나의 일괄 처리에 포함되어 있는 다음 예를 살펴 보십시오.

CREATE TABLE dbo.t3(a int) ;
INSERT INTO dbo.t3 VALUES (1) ;
INSERT INTO dbo.t3 VALUES (1,1) ;
INSERT INTO dbo.t3 VALUES (3) ;
GO

SELECT * FROM dbo.t3 ;

첫 번째, 일괄 처리가 컴파일됩니다. CREATE TABLE 문은 컴파일되었지만 dbo.t3 테이블이 아직 없으므로 INSERT 문은 컴파일되지 않습니다.

두 번째, 일괄 처리가 실행되기 시작합니다. 테이블이 생성됩니다. 첫 번째 INSERT가 컴파일된 후 즉시 실행됩니다. 이제 테이블에 하나의 행이 있습니다. 다음으로 두 번째 INSERT 문이 컴파일됩니다. 컴파일이 실패하고 일괄 처리가 종료됩니다. SELECT 문이 하나의 행을 반환합니다.

SQL Server 2000에서는 일괄 처리가 실행되기 시작하고 테이블이 생성됩니다. 3개의 INSERT 문이 하나씩 컴파일되지만 실행되지는 않습니다. 두 번째 INSERT에서 오류가 발생하기 때문에 전체 일괄 처리가 종료됩니다. SELECT 문이 행을 반환하지 않습니다.

일괄 처리 사용 규칙

일괄 처리 사용에는 다음 규칙이 적용됩니다.

  • CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER 및 CREATE VIEW 문은 일괄 처리에 있는 다른 문과 결합될 수 없습니다. CREATE 문은 반드시 일괄 처리를 시작해야 합니다. 일괄 처리에서 CREATE 문 뒤에 오는 모든 다른 문은 첫 번째 CREATE 문 정의의 일부로 해석됩니다.

  • 동일한 일괄 처리에서 테이블을 변경한 다음 새 열을 참조할 수 없습니다.

  • 일괄 처리의 첫 문이 EXECUTE 문이면 EXECUTE 키워드는 필요 없습니다. EXECUTE 키워드는 EXECUTE 문이 일괄 처리의 첫 문이 아닐 때 필요합니다.

중요 정보중요

일괄 처리 파일에는 일반 텍스트로 저장된 자격 증명이 포함될 수 있습니다. 자격 증명은 일괄 처리를 실행하는 동안 사용자의 화면에 표시됩니다.