다음을 통해 공유


DROP TABLE(Transact-SQL)

하나 이상의 테이블 정의 및 해당 테이블의 모든 데이터, 인덱스, 트리거, 제약 조건 및 권한 지정을 제거합니다. 삭제된 테이블을 참조하는 뷰나 저장 프로시저는 DROP VIEW 또는 DROP PROCEDURE를 사용하여 명시적으로 삭제해야 합니다. 테이블에 대한 종속성을 보고하려면 sys.dm_sql_referencing_entities를 사용하십시오.

구문

DROP TABLE [ database_name . [ schema_name ] . | schema_name . ]
        table_name [ ,...n ] [ ; ]

인수

  • database_name
    테이블이 생성된 데이터베이스 이름입니다.

  • schema_name
    테이블이 속한 스키마 이름입니다.

  • table_name
    제거할 테이블 이름입니다.

주의

DROP TABLE로 FOREIGN KEY 제약 조건에 의해 참조되는 테이블을 삭제할 수 없습니다. 참조하는 FOREIGN KEY 제약 조건 또는 참조하는 테이블을 먼저 삭제해야 합니다. 참조하는 테이블과 기본 키를 포함하는 테이블이 하나의 DROP TABLE 문에서 삭제되는 경우 참조하는 테이블이 먼저 나열되어야 합니다.

모든 데이터베이스에서 여러 테이블을 삭제할 수 있습니다. 삭제될 다른 테이블의 기본 키를 참조하는 테이블이 삭제되는 경우 외래 키가 있는 참조하는 테이블은 참조되는 기본 키를 포함한 테이블보다 먼저 나열되어야 합니다.

테이블을 삭제하면 해당 테이블에 있는 규칙이나 기본값의 바인딩이 해제되고 해당 테이블과 연결된 제약 조건이나 트리거가 자동으로 삭제됩니다. 테이블을 다시 만들려면 해당 규칙과 기본값을 다시 바인딩하고 트리거를 다시 만들어야 하며 필요한 제약 조건을 모두 추가해야 합니다.

DELETE tablename이나 TRUNCATE TABLE 문을 사용하여 테이블의 모든 행을 삭제하는 경우에는 테이블이 삭제될 때까지 테이블은 남아 있습니다.

129개 이상의 익스텐트를 사용하는 큰 테이블 및 인덱스는 논리적 단계와 물리적 단계를 통해 삭제됩니다. 논리적 단계에서는 테이블에 사용되는 기존 할당 단위가 할당 취소로 표시되고 트랜잭션이 커밋될 때까지 잠깁니다. 물리적 단계에서는 할당 취소로 표시된 IAM 페이지가 물리적으로 일괄 삭제됩니다. 자세한 내용은 큰 개체 삭제 및 다시 작성을 참조하십시오.

FILESTREAM 특성이 있는 VARBINARY(MAX) 열이 포함된 테이블을 삭제해도 파일 시스템에 저장된 데이터는 제거되지 않습니다.

중요 정보중요

동일한 일괄 처리에서 동일한 테이블에 대해 DROP TABLE과 CREATE TABLE을 실행할 수는 없습니다. 이를 실행하면 예기치 않은 오류가 발생할 수 있습니다.

사용 권한

테이블이 속한 스키마에 대한 ALTER 권한, 테이블에 대한 CONTROL 권한 또는 db_ddladmin 고정 데이터베이스 역할의 멤버 자격이 필요합니다.

1. 현재 데이터베이스에서 테이블 삭제

다음 예에서는 현재 데이터베이스에서 ProductVendor1 테이블과 해당 데이터 및 인덱스를 제거합니다.

DROP TABLE ProductVendor1 ;

2. 다른 데이터베이스에서 테이블 삭제

다음 예에서는 AdventureWorks2008R2 데이터베이스에서 SalesPerson2 테이블을 삭제합니다. 이 예는 서버 인스턴스의 모든 데이터베이스에서 실행할 수 있습니다.

DROP TABLE AdventureWorks2008R2.dbo.SalesPerson2 ;

3. 임시 테이블 삭제

다음 예에서는 임시 테이블을 만들고 존재 여부를 테스트한 다음 테이블을 삭제하고 다시 존재 여부를 테스트합니다.

USE AdventureWorks2008R2;
GO
CREATE TABLE #temptable (col1 int);
GO
INSERT INTO #temptable
VALUES (10);
GO
SELECT * FROM #temptable;
GO
IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL 
DROP TABLE #temptable;
GO
--Test the drop.
SELECT * FROM #temptable;