2011-08-31 170 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)