【问题标题】:How can I show the last date each table was queried?如何显示查询每个表的最后日期?
【发布时间】:2021-06-03 15:26:00
【问题描述】:

我正在为我们的团队创建一个电子表格,我想确定可以删除的潜在表格

select
    b.name,
    b.type_desc,
    b.create_date,
    b.modify_date,
    datediff(day, b.create_date, b.modify_date) as 'Days_Since_Create_and_Modified',
    datediff(day, b.modify_date, GETDATE()) as 'Days_Since_LastModified',
    datediff(month, b.modify_date, GETDATE()) as 'Months_Since_LastModified'
from
    sys.schemas a
    join sys.objects b on a.schema_id = b.schema_id
where
    a.name = 'tbiz03'
    and b.type in ('P', 'U', 'V')
order by 1,2,3,4

【问题讨论】:

  • 好的,那么您的实际问题是什么?什么不在这里工作?您标题中的最后一个“日期”是什么意思?修改日期?它在您的查询中。
  • 另外,阅读Bad Habits to Kick : ORDER BY ordinalBad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)。即使这些 系统对象并且不太可能更改(在您使用的版本中),也没有什么可以阻止 Microsoft 将来更改顺序,这是一个坏习惯。很好地定义对象。我还建议不要将单引号 (') 用于别名,它们用于文字字符串。

标签: sql sql-server-2012 azure-sql-database


【解决方案1】:

因此,尽管您实际上并没有提出问题,但我会为您提供我认为是您尚未提出的问题的答案...

我怀疑你真的想知道用户上次更新或查询表中的数据多久了,你可以这样找到:

select
t.[name],
t.create_date,
t.modify_date,
DateDiff(day, t.create_date, t.modify_date) as Days_Between_Create_and_Modified,
DateDiff(day, t.modify_date, GetDate()) as Days_Since_LastModified,
DateDiff(month, t.modify_date, GetDate()) as Months_Since_LastModified,
DateDiff(day, i.LastUsed, GetDate()) as Days_since_Table_Queried
from sys.schemas s join sys.tables t on t.schema_id = s.schema_id
outer apply (
    select
     (select Max(LastUsed) 
   from (values (last_user_update), (last_user_seek), (last_user_scan), (last_user_lookup)) as value(LastUsed))LastUsed
    from sys.dm_db_index_usage_stats i
    where i.object_id=t.object_id 
)i
where s.[name] = 'tbiz03'

您明确声明您正在寻找表格,因此无需使用 sys.objects 也无需查看不是表格的对象。

如果您使用适当的字母为表格起别名,也可以让您更轻松地阅读您的查询!

您也不需要将列作为字符串引用,因为您使用的是下划线,如果不是,那么最好使用 [括号]。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多