【问题标题】:Drop table in teradata在 teradata 中删除表
【发布时间】:2012-10-01 15:07:18
【问题描述】:

如果表存在,我尝试使用 C# 删除 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] 语法错误:预期在请求的开头和 'IF' 关键字之间有一些内容。"}

我尝试了第二个代码,下面的代码有效!!!

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();

【问题讨论】:

    标签: c# teradata


    【解决方案1】:

    你可以试试

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

    首先在编辑器中尝试,然后放入您的 .net c# 代码中。

    这将确保表存在,如果存在则将其删除。

    【讨论】:

    • 对不起,它不起作用。如果我只是运行 SELECT 1 FROM dbc.tables WHERE databasename = 'John' AND tablename = 'ctry',那么它会返回一些数据。但是当我应用 IF EXISTS () 然后删除表'ctry'时它失败了
    • {"[Teradata Database] [3706] 语法错误:预期在请求的开头和 'IF' 关键字之间存在某些内容。"}
    • 我已经编辑了我的帖子。我添加的第二个解决方案有效!但如果它没有桌子,它就会失败。
    • 表不存在时如何防止上述不失败?
    【解决方案2】:

    使用它

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 2015-02-03
      • 2011-05-18
      • 1970-01-01
      • 2021-11-23
      • 2022-11-18
      • 2021-01-16
      • 2016-11-30
      相关资源
      最近更新 更多