【问题标题】:Drop all tables from SQL server with the same prefix - vb.net从具有相同前缀的 SQL 服务器中删除所有表 - vb.net
【发布时间】:2014-10-06 01:36:56
【问题描述】:

我正在为我的 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()

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

【问题讨论】:

    标签: sql vb.net


    【解决方案1】:

    您可以查询信息架构表,然后基于此发送您的 DROP 查询。

    例如,这将列出所有以 A 开头的表:

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'A%'
    

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

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

    【讨论】:

    • 我明白了。所以我先选择所有表,然后删除它们。对不起,我的无知,在那之后我该如何丢弃它们?填充数据集,然后从表中提取每个名称,将名称输入到 drop 命令中?
    • 是的,我尽一切努力避免用户创建表。由于多种原因,这超出了我的设计能力(我无法制作具有固定数字或列的表格,因为数据因用户选择而异)。每个用户只有 1 或 2 个这样的表。
    • @Cory:你可以填充数据集,是的。但由于它只是一张表,更简单的选择是创建一个阅读器,然后使用DataTable.Load,如图here,或者使用数据适配器填充一张表,如图here
    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2020-06-10
    • 2014-09-16
    • 2022-12-16
    • 2017-02-06
    • 1970-01-01
    • 2012-06-03
    相关资源
    最近更新 更多