【发布时间】:2013-09-18 15:14:37
【问题描述】:
我在这个 SQL Server (2005) 实例上可能有超过 100 个数据库。我想按照创建日期的顺序列出它们,或者更好的是,按照对任何表的最新修改日期的顺序列出。
是否有我可以编写的 SELECT 查询,同样重要的是,我在什么上下文中编写它以及执行它需要什么权限?
【问题讨论】:
标签: sql sql-server tsql sql-server-2005
我在这个 SQL Server (2005) 实例上可能有超过 100 个数据库。我想按照创建日期的顺序列出它们,或者更好的是,按照对任何表的最新修改日期的顺序列出。
是否有我可以编写的 SELECT 查询,同样重要的是,我在什么上下文中编写它以及执行它需要什么权限?
【问题讨论】:
标签: sql sql-server tsql sql-server-2005
您可以轻松地针对sys.databases 目录视图编写此查询
SELECT * FROM sys.databases
ORDER BY create_date
但不幸的是,我所知道的“最后修改日期”没有等价物......
这应该适用于该服务器上的任何数据库 - 无论您在哪个数据库中,那些 sys 目录视图应该可以从任何地方访问。
【讨论】:
modified_date 是表最后一次在结构上 修改(例如添加、删除列等) - 但不是最后一次它的某些数据被改变了
create table #db_name (db_name nvarchar(128), last_change datetime);
exec sp_MSForEachDB 'Use ?; insert into #db_name (db_name, last_change) select ''?'', max(modify_date) from sys.tables'
select * from #db_name order by last_change desc
这不完全是一个选择,但至少你得到了你想要的。我是我们其中一个数据库的 db_owner,在服务器范围内可能没有什么令人印象深刻的东西,所以要求不是很高。
【讨论】:
这应该让你接近你想要的。
SELECT name, crdate
FROM master..sysdatabases
【讨论】:
sys 架构中的目录视图(而不是已弃用的 sysdatabases 和 sysobjects 等视图)