CREATE TABLE #a( q1 VARCHAR(5000) ); INSERT INTO #a VALUES('SELECT GETDATE()'); INSERT INTO #a VALUES('SELECT GETDATE()'); INSERT INTO #a VALUES('SELECT GETDATE()'); INSERT INTO #a VALUES('SELECT GETDATE()'); INSERT INTO #a VALUES('SELECT GETDATE()'); DECLARE @query VARCHAR(5000) DECLARE CurQuery CURSOR FOR SELECT * FROM #a OPEN CurQuery FETCH NEXT FROM CurQuery INTO @query WHILE @@FETCH_STATUS = 0 BEGIN EXEC(@query) FETCH NEXT FROM CurQuery INTO @query END --end of while CLOSE CurQuery DEALLOCATE CurQuery
TRUNCATE TABLE은 기능적으로 WHERE 절이 없는 DELETE 문과 동일합니다. 둘 다 테이블에서 모든 행을 제거합니다. 그러나 TRUNCATE TABLE이 DELETE보다 더 빠르고 시스템 및 트랜잭션 로그 리소스를 덜 사용합니다.
DELETE 문은 행을 한 번에 하나씩 제거하고 각 삭제된 행에 대해 트랜잭션 로그에 항목을 기록합니다. TRUNCATE TABLE은 테이블의 데이터를 저장하는 데 사용된 데이터 페이지를 할당 취소하여 데이터를 제거하며 페이지 할당 취소만을 트랜잭션 로그에 기록합니다.
TRUNCATE TABLE은 테이블에서 모든 행을 제거하지만 테이블 구조와 그 열, 제약 조건, 인덱스 등은 그대로 남습니다. 새로운 행에 ID로 사용된 카운터는 열에 대한 시드로 재설정됩니다. ID 카운터를 보존하려면 DELETE를 대신 사용하십시오. 테이블 정의 및 그 데이터를 제거하려면 DROP TABLE 문을 사용하십시오.
FOREIGN KEY 제약 조건에 참조되는 테이블에서는 TRUNCATE TABLE을 사용할 수 없으며 대신 WHERE 절 없는 DELETE 문을 사용합니다. TRUNCATE TABLE은 로그되지 않으므로 트리거를 활성화할 수 없습니다.
TRUNCATE TABLE은 인덱스된 뷰에 참여 중인 테이블에서는 사용할 수 없습니다.
예제
다음은 authors 테이블에서 모든 데이터를 제거하는 예제입니다.
TRUNCATE TABLE authors
사용 권한
TRUNCATE TABLE은 테이블 소유자, sysadmin 고정 서버 역할 및 db_owner 및 db_ddladmin 고정 데이터베이스 역할에 대한 권한 기본값이며 전송할 수 없습니다.
truncate table EEMTB_AssociationMember insert INTO EEMTB_AssociationMember Select * FROM dbo.EEMTB_AssociationMember_031918 Select * FROM dbo.EEMTB_AssociationMember
현재 데이터베이스 안에 있는 기존 테이블, 뷰 또는 저장 프로시저의 이름입니다.object는 nvarchar(517)이며, 기본값은 없습니다. object는 existing_owner.object 형식으로 기존 개체 소유자로 한정될 수 있습니다.
[@newowner=] 'owner'
개체의 새 소유자가 될 보안 계정의 이름입니다. owner는 sysname이며, 기본값은 없습니다. owner는 반드시 현재 데이터베이스 내의 유효한 Microsoft® SQLServer™ 사용자 또는 역할이거나 Microsoft Windows NT® 사용자 또는 그룹이어야 합니다. Windows NT 사용자 또는 그룹을 지정할 경우 sp_grantdbaccess를 사용하여 추가하고 데이터베이스에서 Windows NT 사용자 또는 그룹으로 알고 있는 이름을 지정합니다.