【问题标题】:How to get last modified column for all tables in a Sybase database如何获取 Sybase 数据库中所有表的最后修改列
【发布时间】:2015-03-02 19:27:31
【问题描述】:

我正在尝试编写一个 sybase 查询,以了解如何获取 SYBASE 数据库中所有表的最后修改列和时间戳。请在下面找到sql。但这不是一个准确的..它在一个 sybase DB 对象中工作,而不是在另一个环境中。请帮助我正确的sql。

select TableName=object_name(ss.id), RowCnt=st.rowcnt,
ColName=col_name(ss.id,convert(int,substring(ss.colidarray,1,2))),
UpdStatsDate=convert(varchar(20),moddate,100),
DaysAgo=datediff(dd,moddate,getdate())
from sysstatistics ss, systabstats st
where ss.id > 100 and st.id > 100
and ss.id=st.id
and ss.formatid=100
and st.indid in (0,1)
and ss.c4 is not null
order by TableName, ColName

【问题讨论】:

    标签: sybase


    【解决方案1】:

    Sybase ASE 不跟踪最后一次修改列的时间。您可以在表中包含数据类型为 'timestamp' 的列,但是当行中的 any 列更新时,该值也会更新。此外,这样的“时间戳”列并不反映真实世界的时钟时间,而是基于内部“数据库时间戳”的人工内部计数器(同样,这与我们在现实世界中所谓的“时间”无关)。有关该时间戳含义的更多信息,请参阅我的书“Sybase ASE 的提示、技巧和秘诀”(sypron.nl/ttr) 的第 13 章。

    但更重要的是,sysstatistics.moddate 列不会反映列的更新时间。相反,它是最后一次更新列的 statistics 的时间(作为运行 UPDATE STATISTICS 的结果)。

    如果您想跟踪列的最后更新时间,您可以使用 UPDATE 触发器来执行此操作,该触发器检测哪些列已更新以及时间,并将其记录在单独的表中。请注意,这样的触发器可能很快成为繁忙系统中的瓶颈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-15
      • 2013-07-08
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多