【问题标题】:How do I delete all tables in a database using SqlCommand?如何使用 SqlCommand 删除数据库中的所有表?
【发布时间】:2010-04-08 10:35:14
【问题描述】:

与其他关于“删除所有表”任务的帖子不同,这个问题专门关于使用SqlCommand访问数据库。

一位同事面临的问题是,无论他如何尝试,他都无法通过 SqlCommand 从数据库中删除所有表。他表示,只要存在活动连接(SqlCommand 本身的连接),他就无法执行此类操作。

我相信这应该是可能且容易的,但我对数据库没有太多了解,所以我来这里询问。如果你能用 C#(或任何 .NET 语言,就此而言)提供一个简短的代码示例,那就太棒了。

如果您需要更多信息,请发表评论。

【问题讨论】:

  • (他没有使用 SO,所以我代替他问。)

标签: database sql-server-2005 sqlcommand


【解决方案1】:

如果你想删除表而不删除数据库,你也可以使用以下命令:

exec sp_MSforeachtable 'DROP TABLE ?'

请注意,您必须先禁用/删除所有外键约束,否则很可能会失败。

【讨论】:

  • 你如何首先禁用/删除所有外键约束?
  • 您可以使用EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL" 禁用它们。
  • 但他们仍然会在那里:/
  • 问题是包括“如何禁用”它们,而不一定是如何删除它们。 MSDN 上有一篇旧文章展示了如何删除所有约束和外键:tinyurl.com/lz8fpzh
【解决方案2】:

您要么需要发出 DROP DATABASE 命令 - 连接到相关服务器上的“主”数据库,然后发出

DROP DATABASE (your database)

命令。

类似:

using (SqlConnection con = new SqlConnection("server=yourserver;database=master;integrated security=SSPI"))
{
    using (SqlCommand cmd = new SqlCommand("DROP DATABASE (your database)", con))
    {
        try
        {
            con.Open();
            int returnValue = cmd.ExecuteNonQuery();
            con.Close();
        }
        catch (Exception exc)
        {
            string errorMsg = string.Format("{0}: {1}", exc.GetType().FullName, exc.Message);   
        }
    }
}

然后您需要遍历所有表 - 没有一个命令可以一次删除所有表。此外,在删除表时,您可能需要先删除约束和索引。

放弃一切并不是一件容易的事!

【讨论】:

  • 如果其他连接可能正在使用数据库,alter database YourDatabase set offline with rollback immediate ; alter database YourDatabase set online with rollback immediate ; drop database YourDatabase 也很有用。
猜你喜欢
  • 2019-02-24
  • 2011-03-20
  • 1970-01-01
  • 2015-10-31
  • 2020-04-18
  • 2011-05-30
  • 2011-03-25
  • 1970-01-01
相关资源
最近更新 更多