【问题标题】:Process to check for new/deleted tables in database检查数据库中新/已删除表的过程
【发布时间】:2016-10-11 10:18:36
【问题描述】:

有什么方法可以使用 T-SQL 编写以下想法:

我有一个脚本的开始,它识别数据库中当前的表,以及它们各自的行数,如下所示:

    SELECT o.name AS 'TableName' ,i.rows AS 'Records'
    FROM sys.tables as o LEFT JOIN sys.sysindexes as i
    ON  i.id = o.object_id 
    WHERE o.type IN ('U')
    AND i.indid in (0,1)

但是我想设置一些东西,我可以标记出现在数据库中的任何新表(有点像昨天和今天) - 还有最近被删除的任何表。几乎充当“表日志历史记录”。

所以最终输出将是所有当前表 + 新表 + 已删除(从昨天开始)的列表。

提前干杯。

【问题讨论】:

  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它
  • 另外:从 SQL Server 2005 开始,您应该停止使用 sysobjects 视图 - 使用 sys 中的焦点目录视图架构 - 像 sys.tablessys.types
  • 您是否要求以与您相同格式的已删除表计数
  • 谢谢,更改了联接并按照建议重定向到更合适的表。

标签: sql-server database ssms database-administration


【解决方案1】:

您可以从sys.objects 确定何时创建或修改表(create_datemodified_date),但我认为从删除表的角度来看您不走运。

这种审核最好由DDL triggers 处理。您可以创建一个类似dbo.ddl_change_log 的表并使用 DDL 触发器填充它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2012-10-23
    相关资源
    最近更新 更多