【问题标题】:How to Drop Table with Where clause / condition? [duplicate]如何使用 Where 子句/条件删除表? [复制]
【发布时间】:2018-09-07 09:23:57
【问题描述】:

我需要从具有后缀“alpha”的数据库 (Postgres) 中删除表(多个表)。数据库中存在近 500 个具有不同后缀的表,我愿意只删除后缀为“alpha”的表。

表名示例:inventory_20170312_alpha

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    你可以使用:

    SELECT format('DROP TABLE IF EXISTS %s;' ,
                  (SELECT string_agg(table_name, ',') 
                   FROM INFORMATION_SCHEMA.TABLES  WHERE table_name LIKE '%alpha'));
    

    警告!我假设其他表没有 FK。

    DBFiddle Demo

    【讨论】:

      【解决方案2】:

      您可以在下面尝试此代码。如果您正在开发真实产品或类似产品,请先在测试环境中运行它。还要确保您的用户 ID 具有在数据库中删除表的权限。

      DECLARE @cmd varchar(4000)
      DECLARE cmds CURSOR FOR
      SELECT 'drop table [' + Table_Name + ']'
      FROM INFORMATION_SCHEMA.TABLES
      WHERE Table_Name LIKE '%alpha'
      
      OPEN cmds
      WHILE 1 = 1
      BEGIN
          FETCH cmds INTO @cmd
          IF @@fetch_status != 0 BREAK
          EXEC(@cmd)
      END
      CLOSE cmds;
      DEALLOCATE cmds
      

      【讨论】:

      • 我还要补充一点,确保你有一个最新的备份。
      • 好点! @安德鲁
      • 这对 Postgres 无效
      • 上述格式不适合我。它给了我声明“@cmd”的语法错误
      猜你喜欢
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2015-08-27
      • 2015-11-30
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      相关资源
      最近更新 更多