2011-08-31 11 views
73

Tengo dos líneas de código en SQL que crean dos tablas sobre la marcha, lo que necesito hacer algo comoCaída de una tabla temporal si existe

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

mis líneas son las siguientes

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

¿cómo puedo aplicar ese concepto para estas dos tablas en mi procedimiento?

+1

posible duplicado de [? ¿Cuál es la mejor manera de determinar si existe una tabla temporal en SQL Server] (http://stackoverflow.com/questions/2649/whats-the-best -way-to-determine-if-a-temporary-table-exists-in-sql-server) –

+0

posible duplicado de [compruebe si la tabla temporal existe y elimine si existe antes de crear una tabla temporal] (http: // stackoverflow .com/questions/659051/check-if-temp-table-exist-and-delete-if-it-exists-before-creating-a-temp-table) – bobs

Respuesta

143

partir de SQL Server 2016 sólo puede utilizar

DROP TABLE IF EXISTS ##CLIENTS_KEYWORD 

En las versiones anteriores se puede utilizar

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL 
    /*Then it exists*/ 
    DROP TABLE ##CLIENTS_KEYWORD 

CREATE TABLE ##CLIENTS_KEYWORD 
    (
    client_id INT 
) 

También podría considerar truncar la tabla en lugar en lugar de caer y volver a crear.

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

también puede publicar el truncamiento debajo de este enfoque, podría ayúdame para mejor :) gracias – user710502

+1

@user. Ver Editar –

+0

hmm por alguna razón cuando lo ejecuto dice que ## CLIENTS_KEYWORD es un nombre de objeto no válido – user710502

9

comprobar la existencia mediante la recuperación es object_id:

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

Lo que ha solicitado es:

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) 

Ya que siempre va a crear la tabla, independientemente de si la tabla se borra o no; una solución ligeramente optimizado es:

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) 
Cuestiones relacionadas