【问题标题】:List all the databases on one SQL Server in the order they were created按创建顺序列出一台 SQL Server 上的所有数据库
【发布时间】:2013-09-18 15:14:37
【问题描述】:

我在这个 SQL Server (2005) 实例上可能有超过 100 个数据库。我想按照创建日期的顺序列出它们,或者更好的是,按照对任何表的最新修改日期的顺序列出。

是否有我可以编写的 SELECT 查询,同样重要的是,我在什么上下文中编写它以及执行它需要什么权限?

【问题讨论】:

    标签: sql sql-server tsql sql-server-2005


    【解决方案1】:

    您可以轻松地针对sys.databases 目录视图编写此查询

    SELECT * FROM sys.databases
    ORDER BY create_date 
    

    但不幸的是,我所知道的“最后修改日期”没有等价物......

    这应该适用于该服务器上的任何数据库 - 无论您在哪个数据库中,那些 sys 目录视图应该可以从任何地方访问。

    【讨论】:

    • Modify_date 是 sys.tables 中 Create_date 旁边的列,可能只是查询它以查看 DB 上最后一个表的修改时间
    • @orgtigger:modified_date 是表最后一次在结构上 修改(例如添加、删除列等) - 但不是最后一次它的某些数据被改变了
    • 而 sys.databases 在 SQL 2005 中没有该列。 marc_s 也是正确的,我正在寻找数据库中的最后一次数据更改,因为这对我来说最接近交互的新近度(即使它没有跟踪 SELECT 操作)。
    【解决方案2】:
    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,在服务器范围内可能没有什么令人印象深刻的东西,所以要求不是很高。

    【讨论】:

    • 虽然我不能确认它会在 2005 年工作,因为我只有 2008+ 可用,所以这可能是另一个障碍:/
    【解决方案3】:

    这应该让你接近你想要的。

    SELECT name, crdate 
    FROM master..sysdatabases
    

    【讨论】:

    • 从 SQL Server 2005 开始,建议使用 sys 架构中的目录视图(而不是已弃用的 sysdatabasessysobjects 等视图)
    • 此 SQL Server 2000 系统表作为视图包含在内以实现向后兼容性。我们建议您改用当前的 SQL Server 系统视图。要查找等效的系统视图,请参阅将 SQL Server 2000 系统表映射到 SQL Server 2005 系统视图。此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 (technet.microsoft.com/en-us/library/ms179900.aspx)
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2020-10-04
    • 2011-02-23
    相关资源
    最近更新 更多