删除表的最快方法(如果存在)

Posted

技术标签:

【中文标题】删除表的最快方法(如果存在)【英文标题】:Fastest Way To Delete Table (If Exists) 【发布时间】:2015-06-10 22:03:21 【问题描述】:

我正在使用 C# 连接到 access 数据库并检查该数据库中是否存在表。这是我正在使用的语法,但是对于其中有很多表的一些数据库,执行需要相当长的时间。由于速度是这个过程最重要的事情,他们是不是更快的方法?

string[] tableNames = new string[4]  "One", "Two", "Three", "Four" ;
for (int q = tableNames.GetLowerBound(0); q <= tableNames.GetUpperBound(0); q++)

  foreach (DAO.TableDef tabledef in dd.TableDefs)
  
    string strtable = tableNames[q];
    if (tabledef.Name == strtable)  found = true; 
    if (found)  dd.TableDefs.Delete(strtable);  
  

对于任何可能偶然发现这一点的未来旅行者,这是我使用的最终语法 --- 指数级更快!!!

Last EDIT --- 我将 Execute 语句更改为封装在 try/catch 块中,就好像数组中列出的表名实际上不存在一样,它会引发错误。

System.Data.OleDb.OleDbConnection oleconn = new   OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + PathToDatabase" + ".mdb;");
oleconn.Open();
string[] tableNames = new string[4]  "One", "Two", "Three", "Four" ;
for (int q = tableNames.GetLowerBound(0); q <= tableNames.GetUpperBound(0); q++)

  System.Data.OleDb.OleDbCommand cmd = new OleDbCommand("DROP TABLE " + tableNames[q], oleconn);
  try  cmd.ExecuteNonQuery(); 
  catch 

oleconn.Close();

【问题讨论】:

只需运行DROP TABLE [Tablename],如果存在就会删除,否则什么都不做 为什么你不能写一个简单的查询来检查系统对象是否存在 @MethodMan 删除表已经检查实体是否存在,因此之前检查它是否存在是双重检查,因此不会更快。除非他打算在表存在或不存在时做一些特别的事情,否则检查只会减慢进程。 我知道@Franck,但基于不必要的迭代是我问这个的原因.. 您知道您没有将发现的变量重置为假吗?在第一次匹配之后,任何后续表都将被删除。 【参考方案1】:

反转循环(伪代码):

foreach (DAO.TableDef tabledef in dd.TableDefs)

  if (tabledef.Name in tablearray )
   
    dd.TableDefs.Delete(strtable); 
   

【讨论】:

【参考方案2】:

我认为与其检查 C# 应用程序,不如使用您的 ado.net 运行以下查询。

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
     DROP TABLE 'mytablename'

因为它会在您使用 ado.net 时加载元数据,而不是使用执行非查询执行简单查询。

【讨论】:

我不知道 OBJECT_ID 和该语法可以用于 MS-Access 数据库。但考虑到发帖人接受了你的回答,那我可能错了。 (cc: @Steve) 这是 T-SQL 代码。它不适用于 Access SQL。 @GordThompson Uhm 疑似【参考方案3】:

您可以使用Drop Table 删除表。 它的语法是

   if exists (select * from login where name = 'prishu' and pass='prishu')
    drop table login

更多信息请使用link

检查this link also

【讨论】:

我们谈论的是 MS-Access 数据库。你试过那个语法吗?

以上是关于删除表的最快方法(如果存在)的主要内容,如果未能解决你的问题,请参考以下文章

签入记录不存在的链接表的最快方法

如果存在这个表,则删除这个表的sql

Mysql 删除表

如果存在则删除表 Oracle,SQL Developer [重复]

哈希表的查找与插入及删除

删除许多带有子表的记录