【问题标题】:Dropping table based on other table's Name根据其他表的名称删除表
【发布时间】:2016-10-30 01:35:59
【问题描述】:

目前,我基本上是像丢表一样 删除表 从头开始..表名

如果我在其他单独的表中拥有所有表的名称,那么我可以通过加入而不是每次都复制和粘贴名称来执行删除表吗?

所以我想做这样的事情.. 但我不知道如何将它写入 SQL。我确实使用2008版本。 表名从 TableName 表中匹配,然后从头数据库中删除。

【问题讨论】:

  • 想要这样做表明您可能“执行 sql”错误。您通常不会四处创建/删除具有在运行时确定的名称的表。话虽如此,您可以使用动态 SQL 做到这一点。您需要构建一个由一堆 drop 语句组成的字符串,然后将其作为 SQL 执行。请参阅this question 以获得一些灵感。

标签: sql


【解决方案1】:

您可以轻松创建一个游标,该游标循环遍历表的行,并为每个表动态创建和执行删除语句。像这样的东西应该可以解决问题:

DECLARE @i_Current_Drop_Statement NVARCHAR(MAX)

DECLARE Drop_Table_Statements CURSOR LOCAL FAST_FORWARD
    FOR 
    SELECT N'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name)
    FROM sys.tables t --Or replace this with your table that contains the tables to drop

OPEN Drop_Table_Statements
FETCH NEXT FROM Drop_Table_Statements INTO @i_Current_Drop_Statement

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_executesql @i_Current_Drop_Statement

    FETCH NEXT FROM Drop_Table_Statements INTO @i_Current_Drop_Statement
END

CLOSE Drop_Table_Statements
DEALLOCATE Drop_Table_Statements

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2020-02-04
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多