Löschen Sie eine temporäre Tabelle, falls vorhanden

96

Ich habe zwei Codezeilen in SQL, die zwei Tabellen im laufenden Betrieb erstellen. Ich muss so etwas tun

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

Meine Zeilen sind die folgenden

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

Wie kann ich dieses Konzept für diese beiden Tabellen in meiner Prozedur anwenden?

user710502
quelle

Antworten:

200

Ab SQL Server 2016 können Sie nur verwenden

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

In früheren Versionen können Sie verwenden

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

Sie können auch die Tabelle abschneiden, anstatt sie zu löschen und neu zu erstellen.

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
  TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
  CREATE TABLE ##CLIENTS_KEYWORD
  (
     client_id INT
  ) 
Martin Smith
quelle
Kannst
hmm aus irgendeinem Grund, wenn ich es ausführe, heißt es, dass ## CLIENTS_KEYWORD ein ungültiger Objektname ist
user710502
@user - Auf welcher Version von SQL Server befinden Sie sich? Ich bin auf SQL Server 2008 und habe (glaube ich) beide auf den Fall getestet, dass die Tabelle vorhanden war und nicht. Möglicherweise muss die Erstellung in eine Datei eingeschlossen werden, EXECdamit sich der Parser nicht über frühere Versionen beschwert. dh verwendenEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith
+1 für OBJECT_ID IS NULLstatt tempdb.sys.tablesabfrage.
Dakab
1
@TobySpeight - Die Frage bezieht sich auf temporäre Tabellen. Die meisten dieser Punkte sind dafür nur von begrenzter Relevanz.
Martin Smith
13

Überprüfen Sie die Existenz, indem Sie die object_id abrufen:

if object_id('tempdb..##clients_keyword') is not null
    drop table ##clients_keyword
Derek Kromm
quelle
0

Was Sie gefragt haben, ist:

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) 

Da Sie die Tabelle immer erstellen, unabhängig davon, ob die Tabelle gelöscht wird oder nicht; Eine leicht optimierte Lösung ist:

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) 
WonderWorker
quelle