sourcecode

테이블이 있는 경우 테이블을 드롭하려면 어떻게 해야 합니까?

codebag 2023. 4. 8. 08:27
반응형

테이블이 있는 경우 테이블을 드롭하려면 어떻게 해야 합니까?

테이블명은Scores.

다음과 같이 하는 것이 맞습니까?

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

다음과 같이 하는 것이 맞습니까?

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.#TempTableName', 'U') IS NOT NULL
  DROP TABLE #TempTableName; 

SQL Server 2016+는 보다 나은 방법으로DROP TABLE IF EXISTS …@Jovan의 답변을 참조하십시오.

SQL Server 2016부터는

DROP TABLE IF EXISTS dbo.Scores

참조: DROP IF EXISTES - SQL Server 2016의 새로운 기능

곧 SQL Azure Database에 포함될 예정입니다.

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

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

대부분의 최신 RDBMS 서버는 적어도 다음과 같은 기본적인 INFORMATION_SCHEMA 지원을 제공합니다.MySQL, Postgres, Oracle, IBM DB2Microsoft SQL Server 7.0 이상.

잘 안 되는 걸 너무 많이 봐왔어임시 테이블이 생성되면 해당 테이블을 tempdb에서 삭제해야 합니다.

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

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

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 sys.objects where name = 'Scores' and type = 'u')
    drop table Scores

도움이 되었으면 합니다.

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

인수가 기존 테이블의 이름일 경우 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 OBJECT_ID(dbo.TableName, 'U') IS NOT NULL
DROP TABLE dbo.TableName

어디에dbo.TableName원하는 테이블이고 'U'는 원하는 테이블입니다.table.

SQL Server 2016 이상에서는 가장 심플하고 좋은 것은 [테이블명]이 있는 경우 [테이블명]

예:

DROP TABLE IF EXISTS dbo.Scores

위의 것이 작동하지 않으면 아래의 것을 사용할 수 있습니다.

IF OBJECT_ID('dbo.Scores', 'u') IS NOT NULL 
DROP TABLE dbo.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

꼭 사용하세요cascade테이블에 의존하는 모든 객체(예: 뷰 및 투영)를 자동으로 드롭하도록 끝에 구속조건을 설정합니다.

drop table if exists tableName cascade;

긴 코드를 사용하여 임시 테이블에 대한 쓰기를 줄이려면 다음 절차를 수행합니다.

CREATE PROCEDURE MF_DROP (@TEMP AS VARCHAR(100)) AS
    EXEC('IF OBJECT_ID(''TEMPDB.DBO.' + @TEMP + ''', ''U'') IS NOT NULL DROP TABLE ' + @TEMP)

실행 중:

EXEC MF_DROP #A
CREATE TABLE #A (I INT) ....

Visual Studio를 사용하는 경우 메뉴바에서 여는 것이 보다 보기 쉽고 쉬운 방법입니다.

보기 -> SQL Server 객체 탐색기

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

여기에 이미지 설명 입력

[ Select ](선택) 및 [Right](오른쪽)을 클릭하여 삭제할 테이블을 클릭한 후 삭제합니다.이러한 화면이 표시되어야 합니다.데이터베이스 업데이트를 클릭하여 확인합니다.

여기에 이미지 설명 입력

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

언급URL : https://stackoverflow.com/questions/7887011/how-to-drop-a-table-if-it-exists

반응형