2012-10-01 292 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+ "'"