반응형

.WRITE를 사용하면 테이블 또는 뷰의 기존 데이터를 변경할 수 있습니다.
UPDATE 문을 사용하여 데이터를 변경하면 로그가 기록되지만 .WRITE 절을 사용하여 큰 값 데이터 형식에 대하여 부분 업데이트를 수행하면 최소 로깅됩니다.

varchar(max) + 청크 업데이트(Chunk Update) 성능 비교에 있는 내용을 참고로 읽어 보세요.

UPDATE 문에 .WRITE (expression, @Offset, @Length) 절을 사용하여 varchar(max), nvarchar(max), varbinary(max) 데이터 형식의 부분 또는 전체를 업데이트할 수 있습니다. 다음은 UPDATE 문에 .WRITE 절을 사용하여 테스트해 본 스크립트입니다.

USE NewDatatype
GO

-- 테이블 및 테스트 데이터 생성하기
CREATE TABLE max_write (
 id int,
 maxcol varchar(max));
GO
INSERT max_write (id, maxcol) VALUES (1, '012..56..9');
GO
SELECT * FROM max_write WHERE id = 1;
GO
--> 012..56..9

-- 1) 부분 대체
UPDATE max_write SET maxcol .WRITE ('34', 3, 2) WHERE ID = 1 ;
GO
SELECT * FROM max_write WHERE ID = 1 ;
GO
--> 0123456..9

-- 2) 부분 제거
UPDATE max_write SET maxcol .WRITE ('', 7, 2) WHERE ID = 1 ;
GO
SELECT * FROM max_write WHERE ID = 1;
GO
--> 01234569

-- 3) expression을 NULL로 지정 --> @Offset부터 끝까지 삭제
UPDATE max_write SET maxcol .WRITE (NULL, 7, 0) WHERE ID = 1 ;
GO
SELECT * FROM max_write WHERE ID = 1;
GO
--> 0123456

-- 4) @Offset을 NULL로 지정 --> 마지막 부분에 데이터 추가 (@Length는 무시됨)
UPDATE max_write SET maxcol .WRITE ('789', NULL, NULL) WHERE ID = 1 ;
GO
SELECT * FROM max_write WHERE ID = 1;
GO
--> 0123456789

-- 5) @Length를 NULL로 지정 --> @Offset 위치부터 시작하여 끝까지 모두 대체
UPDATE max_write SET maxcol .WRITE ('***', 10, NULL) WHERE ID = 1 ;
GO
SELECT * FROM max_write WHERE ID = 1;
GO
--> 0123456789***

-- 테스트 테이블 삭제
DROP TABLE max_write;
GO
반응형

+ Recent posts