Varsa geçici bir tablo bırakın


96

SQL'de anında iki tablo oluşturan iki satır kodum var, şöyle bir şey yapmam gerekiyor

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

çizgilerim aşağıdakiler

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

Prosedürümde bu iki tablo için bu kavramı nasıl uygulayabilirim?



Yanıtlar:


201

SQL Server 2016'dan sadece şunları kullanabilirsiniz:

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

Önceki sürümlerde kullanabilirsiniz

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

Tabloyu düşürüp yeniden oluşturmak yerine kısaltmayı da düşünebilirsiniz.

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

bu yaklaşımın altına kısaltmayı da gönderebilir misin, daha iyi olmam için bana yardımcı olabilir :) teşekkür ederim
user710502

hmm herhangi bir nedenle çalıştırdığımda ## CLIENTS_KEYWORD'ün geçersiz bir nesne adı olduğunu söylüyor
user710502

@user - SQL Server'ın hangi sürümünü kullanıyorsunuz? SQL Server 2008 kullanıyorum ve (sanırım) tablonun var olduğu ve olmadığı durum için test ettim. EXECAyrıştırıcının önceki sürümlerden şikayet etmemesi için yaratımı bir içine sarması gerekebilir . ör. kullanınEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith

+1sorgu OBJECT_ID IS NULLyerine için tempdb.sys.tables.
dakab

1
@TobySpeight - soru geçici tablolarla ilgili. Bu noktaların çoğunun bununla sınırlı bir ilgisi vardır.
Martin Smith

13

Object_id'yi alarak varlığını kontrol edin:

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

0

İstediğiniz şey:

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) 

Tablonun silinip silinmemesine bakılmaksızın her zaman tabloyu oluşturacağınız için; biraz optimize edilmiş bir çözüm:

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) 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.