Elimina una tabella temporanea se esiste


96

Ho due righe di codice in SQL che creano due tabelle al volo, devo fare qualcosa di simile

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

le mie righe sono le seguenti

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

come posso applicare questo concetto a queste due tabelle nella mia procedura?



Risposte:


200

Da SQL Server 2016 puoi semplicemente usare

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

Nelle versioni precedenti puoi usare

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

Potresti anche considerare di troncare la tabella invece di rilasciarla e ricrearla.

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

puoi anche postare il troncamento sotto questo approccio, potrebbe aiutarmi in meglio :) grazie
user710502

hmm per qualche motivo quando lo eseguo dice che ## CLIENTS_KEYWORD è un nome di oggetto non valido
user710502

@user - Quale versione di SQL Server utilizzi? Sono su SQL Server 2008 e (credo di aver) testato sia per il caso che la tabella esistesse e non esistesse. Potrebbe essere necessario avvolgere la creazione in EXECmodo che il parser non si lamenti delle versioni precedenti. vale a dire utilizzareEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith

+1 per OBJECT_ID IS NULLinvece di tempdb.sys.tablesquery.
dakab

1
@TobySpeight - la domanda riguarda le tabelle temporanee. La maggior parte di questi punti ha una rilevanza limitata per questo.
Martin Smith

13

Verifica l'esistenza recuperando il suo object_id:

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

0

Quello che hai chiesto è:

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) 

Dal momento che creerai sempre la tabella, indipendentemente dal fatto che la tabella venga eliminata o meno; una soluzione leggermente ottimizzata è:

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) 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.