존재하는 경우 테이블을 삭제하는 방법은 무엇입니까?


721

테이블 이름은 Scores입니다.

다음을 수행하는 것이 맞습니까?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

답변:


1377

다음을 수행하는 것이 맞습니까?

IF EXISTS(SELECT *
          FROM   dbo.Scores)
  DROP TABLE dbo.Scores

아니요 . 테이블에 행이 포함 된 경우에만 테이블이 삭제되고 테이블이 없으면 오류가 발생합니다.

대신 영구 테이블의 경우 사용할 수 있습니다

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
  DROP TABLE dbo.Scores; 

또는 임시 테이블의 경우 사용할 수 있습니다

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

SQL Server 2016+는을 사용하는 더 좋은 방법 DROP TABLE IF EXISTS …입니다. @Jovan의 답변을 참조하십시오 .


137
Fwiw- 'U'두 번째 매개 변수는 "이름이 테이블 인 오브젝트 만 찾습니다"를 의미합니다. 하나의 소스 . 그래서 OBJECT_ID('TableName')없는 잘못 이지만, 따라서 어느 미친 듯이 정확한 아니다 'U'마틴의 훌륭한 대답 @에서.
— ruffin

7
두 번째 매개 변수와 관련하여; 여기에 또 다른 출처가 있습니다.보기에 'V'를 사용했습니다.
— The Red Pea

4
안녕하세요, OBJECT_ID ( 'tempdb.dbo. # T', 'U')에서이 두 번째 매개 변수가 무엇을 의미하는지 설명 할 수 있습니까 (예 : 'U')?
— Zvonimir Tokic

9
@ZvonimirTokic "사용자 정의 테이블"을 의미합니다. "IT"는 내부 시스템 정의 테이블입니다. 전체 목록은 다음과 같습니다. msdn.microsoft.com/en-us/library/ms190324.aspx
— Martin Smith


151

ANSI SQL / 크로스 플랫폼 방식은 INFORMATION_SCHEMA 를 사용하는 것으로 , 이는 SQL 데이터베이스 내의 객체에 대한 메타 데이터를 쿼리하도록 특별히 설계되었습니다.

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'Scores' AND TABLE_SCHEMA = 'dbo')
    drop table dbo.Scores;

대부분의 최신 RDBMS 서버는 최소한 MySQL , Postgres , Oracle , IBM DB2 및 Microsoft SQL Server 7.0 이상을 포함한 기본 INFORMATION_SCHEMA 지원을 제공 합니다.


는 IS if existsANSI 규격?
— 마틴 스미스

8
데이터베이스에 둘 이상의 스키마가있는 경우주의하십시오. 감지하고 삭제하는 [점수]에 대해 구체적이어야 할 수도 있습니다. 예 WHERE TABLE_NAME = '점수'와 TABLE_SCHEMA = 'DBO'
— 앤드류 옌스

@kiquenet 일반적으로 그렇습니다. 그러나 if를 사용할 때는 사용하지 않습니다. 이것은 하나의 행을 반환하자마자 중지되기 때문입니다. 그러나 나는 개인적으로 항상 1을 선택합니다.
— Harag

68

실제로 작동하지 않는 많은 것을 보았습니다. 임시 테이블을 만들 때 tempdb에서 삭제해야합니다!

작동하는 유일한 코드는 다음과 같습니다.

IF OBJECT_ID('tempdb..#tempdbname') IS NOT NULL     --Remove dbo here 
    DROP TABLE #tempdbname   -- Remoeve "tempdb.dbo"

3
덕분에, 변화 dbo하는 tempdb이 일을했다. 또한 'u'허용 된 답변의 의견에 언급 된대로 추가하는 것이 좋습니다 . 따라서 전체 IF 문은 다음과 같습니다.IF OBJECT_ID('tempdb..#temp', 'U')
— whiteshooz

38

SQL Server 2016 (13.x) 이상에서

DROP TABLE IF EXISTS dbo.Scores

이전 버전에서

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL 
DROP TABLE dbo.Scores; 

U는 당신이다table type


28

또는:

if exists (select * from sys.objects where name = 'Scores' and type = 'u')
    drop table Scores

4
2005 년부터 sys.tables를 사용하여이를 단순화 할 수 있습니다.if exists (select * from sys.tables where name = 'Scores') drop table Scores
— Michael Parker

26

이게 도움이 되길 바란다:

begin try drop table #tempTable end try
begin catch end catch

22

인수가 기존 테이블의 이름이면 1을 반환하고 그렇지 않으면 0을 반환하는 작은 UDF를 작성했습니다.

CREATE FUNCTION [dbo].[Table_exists]
(
    @TableName VARCHAR(200)
)
    RETURNS BIT
AS
BEGIN
    If Exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @TableName)
        RETURN 1;

    RETURN 0;
END

GO

User존재하는 테이블을 삭제하려면 다음과 같이 호출하십시오.

IF [dbo].[Table_exists]('User') = 1 Drop table [User]

같은 이름이지만 다른 스키마는 어떻습니까? 가장 좋은 방법은 다음과 같습니다. stackoverflow.com/a/33497857/956364
— 인접

9

간단합니다 :

IF OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName

여기서 dbo.TableName원하는 테이블입니다 'U' 입니다 type당신의 table.


6
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE object_id = OBJECT_ID(N'Scores') AND TYPE in (N'U'))
    DROP TABLE Scores
GO

4

나는 사용한다:

if exists (select * 
           from sys.tables 
           where name = 'tableName' 
           and schema_id = schema_id('dbo'))
begin
    drop table dbo.tableName
end


-1

Visual Studio를 사용하는 경우 메뉴 표시 줄에서 열면 시각적이고 쉬운 방법이 향상됩니다.

보기-> SQL Server 개체 탐색기

여기에 표시된 것처럼 열어야합니다

여기에 이미지 설명을 입력하십시오

삭제할 테이블을 선택하고 마우스 오른쪽 단추로 클릭 한 다음 삭제하십시오. 이러한 화면이 표시되어야합니다. 데이터베이스 업데이트를 클릭하여 확인하십시오.

여기에 이미지 설명을 입력하십시오

이 방법은 피드백을 제공하고 삭제 된 테이블과 다른 테이블의 관계에 대해 경고하므로 매우 안전합니다.


5
이 질문은와 (과) 관련이 SQL없습니다 Visual Studio. 따라서이 답변은이 질문과 관련이 없습니다.
— Adnan Sharif 5

-8

이렇게하면 가장 쉬운 방법입니다.

qry 선택 목록에서 원하는대로 검색어가됩니다.

set @qry = ' select * into TempData from (' + @qry + ')Tmp  '

exec (@qry)

select * from TempData 

drop table TempData

4
그것은 단지 나입니까, 아니면 주사하기 쉬운 것처럼 보입니까? 의견을 부탁합니다.
— g00dy

5
그것은 또한 질문과 관련이 없습니다
— Martin Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.