Jatuhkan tabel sementara jika ada

96

Saya memiliki dua baris kode dalam SQL yang membuat dua tabel dengan cepat, saya perlu melakukan sesuatu seperti

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

baris saya adalah yang berikut

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

bagaimana saya bisa menerapkan konsep itu untuk dua tabel ini dalam prosedur saya?

pengguna710502
sumber

Jawaban:

200

Dari SQL Server 2016 Anda bisa menggunakan

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

Pada versi sebelumnya, Anda dapat menggunakan

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

Anda juga dapat mempertimbangkan untuk memotong tabel daripada menjatuhkan dan membuat ulang.

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
  TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
  CREATE TABLE ##CLIENTS_KEYWORD
  (
     client_id INT
  ) 
Martin Smith
sumber
dapatkah Anda juga memposting pemotongan di bawah pendekatan ini, ini mungkin membantu saya menjadi lebih baik :) terima kasih
user710502
hmm untuk beberapa alasan ketika saya menjalankannya dikatakan bahwa ## CLIENTS_KEYWORD adalah nama objek yang tidak valid
user710502
@user - Anda menggunakan versi SQL Server apa? Saya menggunakan SQL Server 2008 dan (rasa saya) menguji kedua kasus yang tabelnya ada dan tidak ada. Mungkin perlu membungkus pembuatannya EXECsehingga parser tidak mengeluh pada versi sebelumnya. yaitu gunakanEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith
+1 untuk OBJECT_ID IS NULLalih - alih tempdb.sys.tableskueri.
dakab
1
@TobySpeight - pertanyaannya adalah tentang tabel sementara. Kebanyakan dari poin-poin ini memiliki relevansi terbatas dengan itu.
Martin Smith
13

Periksa keberadaannya dengan mengambil object_id-nya:

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

Yang Anda minta adalah:

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) 

Karena Anda akan selalu membuat tabel, terlepas dari apakah tabel dihapus atau tidak; solusi yang sedikit dioptimalkan adalah:

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
sumber