开发者社区> 问答> 正文

遍历数据库表,并根据表名删除其中一些表

您好,我想遍历数据库表并删除不需要的表。我也希望这段代码是一个存储过程。

我想遍历此选择的table_name_to_be_deleted:

SELECT name as table_name_to_be_deleted
FROM sys.tables 
WHERE 7=7 
      and name like 'x_%' 
      and modify_date< dateadd(day,-10,GETDATE())

并将我拥有的每个表都放在table_name_to_be_deleted列中

drop table *variable*

很抱歉,没有最低限度的可行产品,因为我对T-SQL不太熟悉,但我将非常感谢您的帮助!

展开
收起
祖安文状元 2020-01-05 14:45:57 604 0
1 条回答
写回答
取消 提交回答
  • 您可以使用动态SQL执行此操作。利用的sys.schemas和sys.tables你可以做这样的事情:

    CREATE PROC dbo.DeleteArchives @OlderThan date AS
    BEGIN
    
        DECLARE @SQL nvarchar(MAX),
                @CRLF nchar(2) = NCHAR(13) + NCHAR(10);
    
        SET @SQL = STUFF((SELECT @CRLF +
                                 N'DROP TABLE ' + QUOTENAME(s.[name]) + N'.' + QUOTENAME(t.[name])
                          FROM sys.schemas s
                               JOIN sys.tables t ON s.schema_id = t.schema_id
                          WHERE t.[name] LIKE N'x[_]%'
                            AND t.modify_date < @OlderThan
                          FOR XML PATH (N''),TYPE).value('.','nvarchar(MAX)'),1,2,N'');
    
        EXEC sys.sp_executesql @SQL;
    
    END;
    
    2020-01-05 14:46:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载