INSTEAD OF 트리거에서 text, ntext 및 image 데이터 사용
데이터 수정은 text, ntext 및 image 열과 관련됩니다. 기본 테이블에서 text, ntext 또는 image 열에 저장된 값은 데이터를 보유하고 있는 페이지를 가리키는 텍스트 포인터입니다. 자세한 내용은 행 내부 데이터를 참조하십시오.
[!참고] text, ntext 및 image 데이터 사용은 이전 버전과의 호환성을 위해서만 지원됩니다. 큰 데이터를 저장하는 경우 varchar(max), nvarchar(max) 및 varbinary(max) 데이터 형식을 사용하는 것이 좋습니다. AFTER 및 INSTEAD OF 트리거는 모두 inserted 및 deleted 테이블에서 varchar(max), nvarchar(max) 및 varbinary(max) 데이터를 지원합니다.
AFTER 트리거가 inserted 및 deleted 테이블에서 text, ntext 또는 image 데이터를 지원하지 않더라도 INSTEAD OF 트리거는 이를 지원합니다. text, ntext 및 image 데이터는 기본 테이블에 저장되는 것과는 다른 방식으로 inserted 및 deleted 테이블에 저장됩니다. text, ntext 및 image 데이터는 별도의 페이지 체인으로 저장되지 않습니다. 이들 데이터는 각 행 내에 연속 문자열로 저장됩니다. 이는 inserted 및 deleted 테이블에는 text, ntext 또는 image 열에 대한 텍스트 포인터가 없음을 의미합니다. inserted 또는 deleted 테이블의 text, ntext 또는 image 열에서는 TEXTPTR 및 TEXTVALID 함수와 READTEXT, UPDATETEXT 및 WRITETEXT 문이 유효하지 않습니다. text, ntext 또는 image 열을 다른 용도로 사용할 수는 있습니다. 예를 들어, SELECT 목록, WHERE 절 검색 조건 또는 SUBSTRING, PATINDEX, CHARINDEX 함수에서 이 열을 참조할 수 있습니다. INSTEAD OF 트리거에서 text, ntext 또는 image 데이터에 대한 작업은 현재 SET TEXTSIZE 옵션이 어떻게 설정되어 있는지에 따라 달라집니다. 이 값은 @@TEXTSIZE 함수를 사용하여 확인할 수 있습니다.
inserted 및 deleted 테이블에 저장된 text, ntext 또는 image 데이터의 유형은 트리거 작업(INSERT, UPDATE, DELETE)에 따라 달라집니다.
- INSERT 문의 경우 inserted 테이블의 text, ntext 또는 image 열에는 새 값이 포함됩니다. deleted 테이블에는 행이 포함되지 않습니다.
- DELETE 문의 경우 inserted 테이블에는 행이 포함되지 않고, deleted 테이블 행에는 DELETE 문이 시작되기 전에 text, ntext 또는 image 열에 있었던 값이 포함됩니다.
- text, ntext 또는 image 값이 변경되지 않는 UPDATE 문의 경우에는 inserted 및 deleted 테이블 모두에 text, ntext 또는 image 열에 있는 값과 동일한 값이 포함됩니다.
- text, ntext 또는 image 값이 변경되는 UPDATE 문의 경우에는 UPDATE 문이 시작되기 전에 있었던 데이터 값이 deleted 테이블에 포함되고, inserted 테이블에는 SET 절에서 지정된 수정 내용이 있는 데이터가 포함됩니다.
INSERT, UPDATE 또는 DELETE 문이 큰 text, ntext 또는 image 값이 포함된 다수의 행을 수정할 경우 inserted 및 deleted 테이블에 text, ntext 또는 image 데이터의 복사본을 보관하는 데 많은 메모리가 필요합니다. 다량의 데이터를 복사하면 성능이 저하됩니다. INSTEAD OF 트리거가 있는 뷰 또는 테이블을 참조하는 INSERT, UPDATE 및 DELETE 문은 한 번에 하나의 행을 수정하거나 가능할 경우 한 번에 몇 개의 행만 수정해야 합니다.