SQL Server sys.tables未捕获正确的modify_date



上下文:我有一个ETL过程设置,可以使用Python脚本填充数据仓库中的表。脚本通过sqlalchemy执行一个truncate语句来清空每个表,然后使用pandas.to_sql方法从数据帧加载新的源数据。参见以下片段:

engine.execute(sa_text(f'''TRUNCATE TABLE {schema}.{table}''').execution_options(autocommit=True))
df.to_sql(table, con=engine, schema=schema, if_exists='append', index=False, chunksize=chunksize,
method=method)

问题:奇怪的是,每个表的SQL Server的sys.tablesmodify_date列没有捕获反映最新modify_date的表更改。有人能向我解释为什么会这样,以及我如何修改Python代码和/或SQL Server设置,以准确地捕捉sys.tables中的更改吗?

modify_date不会捕获TRUNCATE(或对数据的任何更改(。从关于sys.objects的文档(sys.tables就是从这里获得列的(:

上次使用ALTER语句修改对象的日期。如果对象是表或视图,则在创建或更改表或视图上的索引时,modify_date也会更改。

SQL Server默认情况下不跟踪数据修改,而且您似乎只跟踪这些截断操作,在这种情况下,我建议您的应用程序在每个操作成功(或失败(时写入一个日志表。

相关内容

  • 没有找到相关文章

最新更新