【问题标题】:SQL Server sys.tables not capturing correct modify_dateSQL Server sys.tables 未捕获正确的 modify_date
【发布时间】:2025-12-18 05:25:01
【问题描述】:

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

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.tables modify_date 列并未捕获反映最新 modify_date 的表更改。有人可以向我解释为什么会这样,以及如何修改我的 Python 代码和/或 SQL Server 设置以准确捕获 sys.tables 中的更改吗?

【问题讨论】:

    标签: sql-server pandas sqlalchemy truncate pandas-to-sql


    【解决方案1】:

    modify_date 不捕获TRUNCATE(或对数据的任何更改)。来自the documentation on sys.objects(这是sys.tables 获取其列的地方):

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

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

    【讨论】:

    • 谢谢@aaron。您知道任何跟踪数据更改的系统表吗?我希望我不需要设置变更数据捕获或类似的东西。
    • 不,更改数据捕获、依赖索引使用统计 DMV 等对于您要跟踪的内容都有各种陷阱(假设它只是您要跟踪的截断)。如果您想捕获所有数据更改,那么,是的,更改数据捕获或更改跟踪,或者临时表是您应该查看的功能。
    最近更新 更多