从SQL Server中删除具有相同前缀的所有表 - vb.net

时间:2014-08-12 20:29:06

标签: sql vb.net

我正在创建一个删除用户帐户'我的vb.net应用程序的按钮。用户可能创建了一些表,需要将这些表与用户的帐户一起删除。用户创建的任何表都将使用用户的ID和数字命名。例如:' sam_21',' sam_45'。如何删除所有以' sam _"?

开头的表格

会是这样的:

 dim userID = Users.Identity.Name
 cmd = New SqlCommand("DROP table_name WHERE table_name LIKE @userId")
 cmd.Parameters.AddWithValue("@userId", userID & "_%")
 dc.Open()
 cmd.ExecuteNonQuery()
 dc.Close()
 Membership.DeleteUser(User.Identity.Name)

 FormsAuthentication.SignOut()
 FormsAuthentication.RedirectToLoginPage()

但是当它也是变量时,如何处理语句的表名方面?

1 个答案:

答案 0 :(得分:2)

您可以查询信息架构表,然后根据它发送DROP查询。

例如,这将列出以A:

开头的所有表
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'A%'

SQL Server本身不支持DROP语句的WHERE子句,因为删除表不是经常发生的事情。你绝对不想像生产中那样进行批量删除。

删除用户帐户应该要求删除一个或多个表中的记录。如果您需要删除表格,可能需要考虑重新设计。一个简单的解释,想象一下应用程序中的10000个帐户,以及100个"表"每个帐户。您真的想在SQL数据库中拥有100万个表吗?您如何查询多个用户以生成管理报告?这样的事情导致了每个用户记录的常识,+用户详细信息的附加记录,例如地址,成员资格,权限等。