Видаліть тимчасову таблицю, якщо вона існує


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

хм, чомусь, коли я його виконую, там пише, що ## CLIENTS_KEYWORD - недійсне ім'я об'єкта
user710502

@user - На якій версії SQL Server ви працюєте? Я працюю на SQL Server 2008 і (думаю, я) протестував як на випадок, коли таблиця існувала, так і не існувала. Йому може знадобитися загортання створення, EXECщоб парсер не скаржився на попередні версії. тобто використанняEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Мартін Сміт

+1OBJECT_ID IS NULLзамість tempdb.sys.tablesзапиту.
dakab

1
@TobySpeight - питання стосується тимчасових таблиць. Більшість із цих пунктів мають обмежене значення для цього.
Мартін Сміт,

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) 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.