2011-08-31 161 views
73

我在SQL的两行代码动态创建两个表,我需要做的是这样删除临时表,如果它存在

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

我的线下那些

​​

如何在我的程序中将这个概念应用于这两个表格?

+1

可能重复[?什么是确定一个临时表中的SQL Server中存在的最佳方式(http://stackoverflow.com/questions/2649/whats-the-best如果临时表存在于sql服务器中) –

+0

[检查临时表是否存在并删除它在创建临时表之前是否存在](http:// stackoverflow .com/questions/659051/check-if-temp-table-exists-and-delete-if-exists-before-creating-temp-table) – bobs

回答

143

从SQL Server 2016,你可以只使用

DROP TABLE IF EXISTS ##CLIENTS_KEYWORD 

在以前的版本中,你可以使用

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

CREATE TABLE ##CLIENTS_KEYWORD 
    (
    client_id INT 
) 

你也可以考虑截断表代替,而不是删除和重建。

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

你也可以在这个方法下面发布截断,它可能会帮助我更好:)谢谢 – user710502

+1

@user。请参阅编辑 –

+0

hmm由于某种原因,当我执行它时,它表示## CLIENTS_KEYWORD是无效的对象名称 – user710502

9

检查是否存在通过检索它的OBJECT_ID:

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

你问的是:

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) 

因为你总是要创建的表,无论该表被删除或不;稍微优化的解决方案是:

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)