超过 6 个月的 SQL Server DETACH 数据库

Posted

技术标签:

【中文标题】超过 6 个月的 SQL Server DETACH 数据库【英文标题】:SQL Server DETACH databases older than 6 months 【发布时间】:2013-01-09 11:17:07 【问题描述】:

我可以像这样检索超过 6 个月前创建的数据库列表:-

-- all databases over 6 months old
select name, crdate
from sys.sysdatabases
where crdate <= DATEADD(month, -6, GETDATE())
      AND name not in ('master','model','msdb','tempdb','distribution')

给出如下结果:-

name        crdate
db1         2008-06-25 09:01:11.747
db2         2008-06-25 09:01:50.967

我可以像这样分离数据库:-

-- detach database
EXEC master.dbo.sp_detach_db @dbname = N'db1',
@keepfulltextindexfile = N'true'

我需要为第一个查询返回的每个数据库运行sp_detach_db

最好的方法是什么?

【问题讨论】:

【参考方案1】:

您可以为任务使用光标:

declare cur cursor for
select name
from sys.sysdatabases
where crdate <= DATEADD(month, -6, GETDATE())
and name not in ('master','model','msdb','tempdb','distribution')

declare @name nvarchar(200)

open cur

fetch next from cur into @name

while @@FETCH_STATUS = 0
begin
    EXEC master.dbo.sp_detach_db @dbname = @name, @keepfulltextindexfile = N'true'
    fetch next from cur into @name
end

close cur
deallocate cur      

【讨论】:

以上是关于超过 6 个月的 SQL Server DETACH 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sql server 中获取最近 3 个月的名称

前 3 个月的滚动总和 SQL Server

sql 怎么查询每一年1到12个月的数据

如何在n个月内使用sql(无程序)获取每个月的第一天和最后一天

SQL Hive - 计算前几个月的滚动 SUM、AVG

如何在SQL中获取当前日期最近六个月的前一个月数据