【问题标题】:Check if sybase table updated previously检查 sybase 表是否以前更新
【发布时间】:2017-05-19 12:59:25
【问题描述】:

我很好奇是否有办法知道 sybase 表之前是否已更新/添加?该表是通用的,我不允许使用触发器或创建类似 updateDate 字段的内容。检查行数变化不是一种选择。

我的第一个想法是检查 sysobjects 表,但从我使用下面的 sql 看到的情况来看,我认为没有列存储任何有用的信息来解决我的问题。

select name,userstat,uid, type, sysstat, indexdel, schemacnt,sysstat2,sysstat3, crdate,expdate,deltrig,instrig,ckfirst,cache, objspare,versionts,loginame,identburnmax,spacestate,erlchgts,lobcomp_lvl
from sysobjects o where type = 'U'

关于如何知道表格是否已更新的任何其他想法?

【问题讨论】:

  • 您是否有兴趣确定一个表是否曾经更新过,或者是否在某个时间更新过?如果是后者,那么您可以进行的一项设计更改是在您的表格中添加最后更新时间的列。
  • 后者,也是我所怀疑的。只是想确定有没有其他可能的方法。
  • 即使有其他方法,它也可能是 Sybase 特有的,这意味着如果您要移植到或支持另一个数据库,它可能无法在那里工作。
  • sybase spesific 对于这种情况来说是一个不错的解决方案。我更喜欢把更新的日期+触发器,但这不是我要做的。

标签: sql sybase


【解决方案1】:

如果您的数据库管理员每天设置 systabstats 更新,您可以使用以下查询来获取表的最后修改/更新日期。

select MAX(statmoddate) as last_modified_date
from systabstats
where id = object_id('table_name')

【讨论】:

    【解决方案2】:

    找到了一种使用datachange函数的方法。

    select convert(varchar(30),o.name) AS table_name,
    row_count(db_id(), o.id) AS row_count,
    datachange('AAA_TABLE', null, null) AS changes
    from sysobjects o
    where type = 'U' and o.name='AAA_TABLE'
    order by table_name
    

    在更新表格结果之前是:

    使用以下 SQL 更新后:

    update AAA_TABLE set TYPE='1234' where ID=1 //previously TYPE was 1233
    

    结果改为:

    字段“更改”已更新为新值,似乎这是一个不错的解决方案,但我仍然对任何其他想法持开放态度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多