2012-10-01 288 views
0

如果表存在,我嘗試使用C#刪除Teradata數據庫中的表。teradata中的表刪除表

cmd.CommandText = string.Format("IF EXISTS 
(SELECT * FROM sysobjects WHERE type = 'U' AND name = '{0}') 
    BEGIN DROP TABLE '{0}' END", Customer.TableName); 
cmd.ExecuteNonQuery(); 

但上面總是失敗:

{"[Teradata Database] [3706] Syntax error: expected something between the beginning of the request and the 'IF' keyword."}

二碼我想,下面的代碼工作!

cmd.CommandText = "select count (*) from Customer.TableName"; 
        reader = cmd.ExecuteReader(); 

        if (reader.FieldCount > 0) 
        { 
         reader.Close(); 
         cmd.CommandText = "Drop table Customer.TableName"; 
         reader = cmd.ExecuteReader(); 
        } 

但是,它只有當表格存在時才起作用。如果表Customer.TableName不存在,那麼就會接受這種

"select count (*) from Customer.TableName"; 
         reader = cmd.ExecuteReader(); 

回答

0

失敗時你可以試試

IF EXISTS(SELECT 1 FROM dbc.tables WHERE databasename = db_name 
AND tablename = table_name) THEN DROP TABLE table_name 

的第一次嘗試這個編輯器中,然後將在.NET的C#代碼。

這將確保表的存在,如果它存在,它將刪除它。

+0

對不起工作,沒有工作。如果我只運行SELECT 1 FROM dbc.tables WHERE databasename ='John'AND tablename ='ctry',那麼它會返回一些數據。但它失敗了,當我申請IF EXISTS()然後下降表'ctry' – VeecoTech

+0

什麼是錯誤? –

+0

{「[Teradata Database] [3706]語法錯誤:預計在請求開頭和'IF'關鍵字之間有一些東西。」} – VeecoTech

0

得到它與

"select count(*) from DBC.TABLES WHERE TABLENAME ='" + table.Split('.')[1] + "' and DatabaseName = '" + databasename+ "'"