다음을 통해 공유


DROP TABLE(Transact-SQL)

적용 대상: Microsoft Fabric의 SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)웨어하우스

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

Transact-SQL 구문 표기 규칙

구문

-- Syntax for SQL Server, Azure SQL Database, Warehouse in Microsoft Fabric

DROP TABLE [ IF EXISTS ] { database_name.schema_name.table_name | schema_name.table_name | table_name } [ ,...n ]
[ ; ]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse

DROP TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
[;]

인수

database_name

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

Azure SQL Database는 현재 데이터베이스 또는 is일 때 세 부분 이름 형식을 database_name.schema_name.object_name 지원하며, object_name 또는 ##로 시작합니다#.database_nametempdbdatabase_name Azure SQL Database는 4부분 이름을 지원하지 않습니다.

존재하는 경우

적용 대상: SQL Server (SQL Server 2016(13.x) ~ 현재 버전).

이미 있는 경우에만 테이블을 조건부로 삭제합니다.

schema_name

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

table_name

제거할 테이블의 이름입니다.

설명

DROP TABLE 제약 조건에 의해 FOREIGN KEY 참조되는 테이블을 드롭하는 데 사용할 수 없습니다. FOREIGN KEY 참조 제약 조건이나 참조 테이블을 먼저 버려야 합니다.

하나의 DROP TABLE 문에서 여러 테이블을 드롭할 수 있습니다. 제약 조건 내 FOREIGN KEY 참조 테이블과 참조된 기본 키나 고유 키가 있는 테이블이 같은 문장에서 DROP TABLE 모두 삭제된다면, 참조 테이블이 먼저 나열되어야 합니다.

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

만약 테이블 DELETE 의 모든 행을 삭제하거나 문을 사용 TRUNCATE TABLE 하면, 테이블 정의 DROP TABLE는 .

속성이 포함된 FILESTREAM 열이 포함된 varbinary(max) 테이블을 드롭해도 파일 시스템에 저장된 데이터는 삭제되지 않습니다.

원장 테이블을 삭제하면 종속 개체(기록 테이블 및 원장 뷰)도 삭제됩니다. 히스토리 테이블이나 원장 뷰는 직접 드롭할 수 없습니다. 시스템은 원장 테이블과 그 종속 객체를 삭제할 때 소프트 삭제 의미론을 강제합니다 – 실제로 삭제되는 것이 아니라 시스템 카탈로그 뷰에서 삭제된 것으로 표시되고 이름을 변경합니다. 자세한 내용은 원장 고려 사항 및 제한 사항을 참조하세요.

중요

DROP TABLE CREATE TABLE 그리고 같은 테이블에서 같은 배치에서 실행되어서는 안 됩니다. 이를 실행하면 예기치 않은 오류가 발생할 수 있습니다.

Fabric SQL 데이터베이스에서는 테이블을 드롭하면 데이터베이스와 Fabric OneLake 모두에서 테이블이 삭제됩니다. 드롭된 테이블의 모든 미러링 데이터는 제거됩니다.

연기 딜로배션

테이블이 삭제되고 테이블이나 인덱스가 128개 이상의 확장을 가지면, 데이터베이스 엔진은 실제 페이지 할당 해제와 관련 잠금을 트랜잭션 커밋 후까지 연기합니다. 테이블과 인덱스는 논리적 단계와 물리적인 단계 두 단계로 분리됩니다. 논리 단계에서는 기존 할당 유닛이 딜로배션 표시를 받고 트랜잭션이 커밋될 때까지 잠깁니다. 물리적 단계에서는 백그라운드 프로세스가 해제 표시된 페이지를 제거합니다. 즉, 공개된 DROP TABLE 공간이 즉시 새로운 할당에 사용할 수 없을 수도 있습니다.

가속 데이터베이스 복구가 활성화되어 있을 경우, 확장 수와 관계없이 논리 단계와 물리 단계를 분리하여 사용합니다.

사용 권한

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

문장이 원장 테이블을 드랍하면 허가가 ALTER LEDGER 필요합니다.

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

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

DROP TABLE ProductVendor1;

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

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

DROP TABLE AdventureWorks2022.dbo.SalesPerson2 ;

C. 임시 테이블 삭제

다음 예시는 임시 테이블을 생성하고, 그 존재를 테스트한 뒤 삭제한 뒤, 다시 한 번 실행 시도를 시도해 SELECT 존재 여부를 검사하지만, 문장은 실패합니다. 이 예시는 SQL Server 2016(13.x)부터 제공되는 문법을 IF EXISTS 사용하지 않습니다.

CREATE TABLE #temptable (col1 int);

INSERT INTO #temptable
VALUES (10);

SELECT col1 FROM #temptable;

IF OBJECT_ID(N'tempdb..#temptable', N'U') IS NOT NULL
  DROP TABLE #temptable;

SELECT col1 FROM #temptable;

D. IF EXISTS를 사용하여 테이블 삭제

적용 대상: SQL Server (SQL Server 2016(13.x) ~ 현재 버전).

다음 예제에서는 이름이 인 T1테이블을 만듭니다. 다음으로 두 번째 문이 삭제됩니다. 세 번째 문장은 테이블이 이미 삭제되었기 때문에 아무런 행동도 하지 않지만, 오류를 일으키지는 않습니다.

CREATE TABLE T1 (Col1 int);

DROP TABLE T1;

DROP TABLE IF EXISTS T1;