Assert 실행 계획 연산자
업데이트: 2006년 4월 14일
Assert 연산자는 조건을 확인합니다. 예를 들어 참조 무결성을 확인하거나 스칼라 하위 쿼리에서 한 개의 행을 반환하게 합니다. Assert 연산자는 각 입력 행에 대해 실행 계획의 Argument 열의 식을 계산합니다. 이 식이 NULL이면 Assert 연산자를 통해 행이 전달되고 쿼리 실행을 계속합니다. 이 식이 NULL이 아니면 해당 오류가 발생합니다.
Assert 연산자는 물리 연산자입니다.
그래픽 실행 계획 아이콘
예
1. CHECK 제약 조건의 유효성 검사
다음 예에서는 Employee
테이블에서 지정한 직원의 ID에 대해 Gender
열의 값을 업데이트합니다. 테이블에는 열에 'F' 및 'M' 값만 허용하는 CHECK 제약 조건이 있습니다. 쿼리 실행 계획의 출력에서는 쿼리 최적화 프로그램이 Assert 연산자를 사용하여 CHECK 제약 조건에 대해 UPDATE 문에서 지정한 값의 유효성을 검사하고 제약 조건의 조건이 충족되지 않을 때 오류를 발생시킴을 보여 줍니다.
USE AdventureWorks;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
UPDATE HumanResources.Employee
SET Gender = 'X' WHERE EmployeeID = 1;
GO
SET SHOWPLAN_ALL OFF;
GO
Assert 연산자의 실행 계획 출력을 아래에 표시합니다.
PhysicalOp
-----------------------------------------------------------------------
Assert
Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN upper([AdventureWorks].[HumanResources].[Employee].[Gender])<>N'F' AND
upper([AdventureWorks].[HumanResources].[Employee].[Gender])<>N'M' THEN
(0) ELSE NULL END)
2. FOREIGN KEY 제약 조건의 유효성 검사
다음 예에서는 Person.Contact
테이블에서 행을 삭제합니다. 이 경우 이 테이블의 ContactID
열에 대한 외래 키 참조가 있는 6개 테이블이 있습니다. 쿼리 실행 계획의 출력에서는 쿼리 최적화 프로그램이 Assert 연산자를 사용하여 이러한 각 제약 조건에 대해 DELETE 문의 유효성을 검사함을 보여 줍니다.
USE AdventureWorks;
GO
SET NOCOUNT ON;
go
SET SHOWPLAN_ALL ON;
GO
DELETE Person.Contact WHERE ContactID = 1209;
GO
SET SHOWPLAN_ALL OFF;
GO
Assert 연산자의 실행 계획 출력을 아래에 표시합니다.
PhysicalOp
-----------------------------------------------------------------------
Assert
Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN NOT [Expr1030] IS NULL THEN (0) ELSE CASE WHEN NOT
[Expr1031] IS NULL THEN (1) ELSE CASE WHEN NOT [Expr1032] IS NULL THEN
(2) ELSE CASE WHEN NOT [Expr1033] IS NULL THEN (3) ELSE CASE WHEN NOT
[Expr1034] IS NULL THEN (4) ELSE CASE WHEN NOT [Expr1035] IS NULL THEN (5) ELSE NULL END END END END END END)
3. 스칼라 하위 쿼리의 유효성 검사
다음 예에서는 쿼리의 WHERE 절에 하위 쿼리를 사용합니다. 이 예에서는 의도적으로 여러 행을 반환하는 하위 쿼리를 사용하여 Assert 연산자에서 오류가 발생하도록 강제 적용합니다. 쿼리 실행 계획의 출력에서는 쿼리 최적화 프로그램이 Assert 연산자를 사용하여 SELECT 문에서 지정한 하위 쿼리에서 하나의 행만 반환되도록 함을 보여 줍니다.
USE AdventureWorks;
GO
SET NOCOUNT ON;
go
SET SHOWPLAN_ALL ON;
GO
SELECT EmployeeID
FROM HumanResources.Employee
WHERE ContactID = (SELECT ContactID FROM Person.Contact);
GO
SET SHOWPLAN_ALL OFF;
GO
-- Run the query again to display the error message raised by the
-- Assert Operator.
SELECT EmployeeID
FROM HumanResources.Employee
WHERE ContactID = (SELECT ContactID FROM Person.Contact);
GO
Assert 연산자의 실행 계획 출력을 아래에 표시합니다.
PhysicalOp
-----------------------------------------------------------------------
Assert
Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN [Expr1007]>(1) THEN (0) ELSE NULL END)
참고 항목
작업
개념
논리 및 물리 연산자 참조
실행 계획 SET 옵션을 사용하여 실행 계획 표시(Transact-SQL)
도움말 및 정보
변경 내역
릴리스 | 내역 |
---|---|
2006년 4월 14일 |
|