Отбрасывать временную таблицу, если она существует

У меня есть две строки кода в 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)   

как я могу применить эту концепцию для этих двух таблиц в моей процедуре?

Ответ 1

Из SQL Server 2016 вы можете просто использовать

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

В предыдущих версиях вы можете использовать

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
  /*Then it exists*/
  DROP TABLE ##CLIENTS_KEYWORD

CREATE TABLE ##CLIENTS_KEYWORD
  (
     client_id INT
  ) 

Вы могли бы также рассмотреть усечение таблицы вместо того, чтобы отбрасывать и воссоздавать.

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

Ответ 2

Проверьте наличие, извлекая его object_id:

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

Ответ 3

Что вы просили:

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)