sql - 删除临时表(如果存在)

我在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)   

如何在我的程序中对这两个表应用这个概念?

user710502 asked 2019-08-13T11:52:17Z
3个解决方案
186 votes

从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
  ) 
Martin Smith answered 2019-08-13T11:52:50Z
12 votes

通过检索其object_id来检查是否存在:

if object_id('tempdb..##clients_keyword') is not null
    drop table ##clients_keyword
Derek Kromm answered 2019-08-13T11:53:15Z
0 votes

你问的是:

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) 
Knickerless-Noggins answered 2019-08-13T11:53:46Z
translate from https://stackoverflow.com:/questions/7259285/drop-a-temporary-table-if-it-exists