sql-server 조건 - 테이블이 SQL Server에있는 경우 테이블을 삭제하는 방법?




예제 오라클 (11)

테이블 이름은 Scores 입니다.

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

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

Answers

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

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

대부분의 최신 RDBMS 서버는 최소한 MySQL , Postgres , Oracle , IBM DB2Microsoft SQL Server 7.0 (이상)을 포함하여 기본적인 INFORMATION_SCHEMA 지원을 제공합니다.


너무 많은 것을 보아서 실제로 작동하지 마십시오. temp 테이블을 만들 때 tempdb에서 삭제해야합니다!

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

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

간단합니다 :

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

여기서 dbo.TableName 은 원하는 테이블이고 'U'table type 입니다.


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

qry 는 선택 목록에서 원하는 것이 무엇이든지간에 자신의 쿼리가됩니다.

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

exec (@qry)

select * from TempData 

drop table TempData

인수가 존재하는 테이블의 이름이면 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]

또는:

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

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

나는 사용한다:

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

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


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

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; 

DROP TABLE IF EXISTS … 사용하면 SQL Server 2016+가 더 나은 방법을 제공합니다. @ Jovan의 답변 보기.


select distinct object_name(sc.id)
from syscolumns sc,sysobjects so  
where sc.name like '%col_name%' and so.type='U'






sql sql-server