代码之家  ›  专栏  ›  技术社区  ›  mafu

如何使用sqlcommand删除数据库中的所有表?

  •  1
  • mafu  · 技术社区  · 14 年前

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

    一个同事面临的问题是,无论它如何尝试,他都无法通过sqlcommand从数据库中删除所有表。他指出,只要存在活动连接(sqlcommand本身的连接),他就不能执行这样的操作。

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

    如果你需要更多的信息,请留下评论。

    2 回复  |  直到 14 年前
        1
  •  0
  •   marc_s HarisH Sharma    14 年前

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

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

    或者你需要遍历所有的表-没有一个命令可以同时删除所有的表。另外,删除表时,可能需要先删除约束和索引。

    放弃一切并不容易!

        2
  •  1
  •   Diego    14 年前

    如果要删除表而不删除数据库,还可以使用以下命令:

    exec sp_MSforeachtable 'DROP TABLE ?'
    

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