존재하는 경우 임시 테이블 삭제


96

즉시 두 개의 테이블을 생성하는 SQL 코드 두 줄이 있습니다.

IF TABLE EXISTS 
    DROP IT AND CREATE IT AGAIN
ELSE
    CREATE IT

내 대사는 다음과 같습니다

CREATE TABLE ##CLIENTS_KEYWORD(client_id int)     
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)   

내 절차에서이 두 테이블에이 개념을 어떻게 적용 할 수 있습니까?



답변:


200

SQL Server 2016에서는 다음을 사용할 수 있습니다.

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

이전 버전에서는 다음을 사용할 수 있습니다.

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD
(
   client_id INT
)

삭제하고 다시 만드는 대신 테이블을 자르는 것도 고려할 수 있습니다.

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
  TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
  CREATE TABLE ##CLIENTS_KEYWORD
  (
     client_id INT
  ) 

당신은 또한이 접근법 아래에 잘림을 게시 할 수 있습니까, 그것은 더 나은 나를 위해 도움이 될 수 있습니다 :) 감사합니다
user710502 2011-08-31

어떤 이유로 실행하면 ## CLIENTS_KEYWORD가 잘못된 개체 이름이라는 메시지가 표시됩니다
user710502

@user-어떤 버전의 SQL Server를 사용하고 있습니까? 저는 SQL Server 2008을 사용 중이며 테이블이 존재하고 존재하지 않는 경우 모두 테스트했습니다. EXEC파서가 이전 버전에서 불평하지 않도록 생성을 래핑해야 할 수도 있습니다 . 즉 사용EXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith

+1 for 쿼리 OBJECT_ID IS NULL대신 tempdb.sys.tables.
dakab

1
@TobySpeight-질문은 임시 테이블에 관한 것입니다. 이러한 점의 대부분은 관련성이 제한적입니다.
Martin Smith

13

object_id를 검색하여 존재를 확인하십시오.

if object_id('tempdb..##clients_keyword') is not null
    drop table ##clients_keyword

0

당신이 요청한 것은 :

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
    BEGIN
       DROP TABLE ##CLIENTS_KEYWORD

       CREATE TABLE ##CLIENTS_KEYWORD(client_id int)

    END
ELSE
   CREATE TABLE ##CLIENTS_KEYWORD(client_id int) 

IF OBJECT_ID('tempdb..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
    BEGIN
       DROP TABLE ##TEMP_CLIENTS_KEYWORD

       CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)

    END
ELSE
   CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int) 

테이블이 삭제되었는지 여부에 관계없이 항상 테이블을 생성 할 것이므로; 약간 최적화 된 솔루션은 다음과 같습니다.

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
   DROP TABLE ##CLIENTS_KEYWORD

CREATE TABLE ##CLIENTS_KEYWORD(client_id int) 

IF OBJECT_ID('tempdb..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
   DROP TABLE ##TEMP_CLIENTS_KEYWORD

CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int) 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.