【问题标题】:Query to find the records from a table which are updated or added in the last one month?查询表中最近一个月更新或添加的记录?
【发布时间】:2010-04-21 10:12:24
【问题描述】:

我想从表中选择最近一个月更新或添加的记录(表没有任何日期时间字段,我无法更改表结构)。 是否可以为此编写一个sql查询?如何从表中获取这些记录。

问候, 库马尔

【问题讨论】:

    标签: sql sql-server database sql-server-2005


    【解决方案1】:

    如果您被允许使用触发器并添加额外的跟踪表(同时保持现有的表结构不变),这是可能的

    显然,您将无法找出已经更改的内容,但这将使您能够想出一个解决方案来跟踪实施后所做的更改。

    如果这有用,请告诉我,我可以为您提供更多详细信息。

    【讨论】:

    • 感谢您的建议。但是我们没有使用任何种类的触发器有没有其他我们可以做到的场景?
    • 在那种情况下,你不可能做你想做的事,你不能凭空变魔术数据。如果您使用的是 SQL 2008,您可能能够启用更改跟踪,但这是最后一丝希望。
    • 我无法将数据从空中魔术出来。但我会尝试。在这种情况下,是否可以使用 getDate() 或 sys.objetcs 或 @@IDENTITY 从表中获取上个月更新的记录,我可以使用它们中的任何一个或全部吗?
    【解决方案2】:

    如果您使用的是 SQL Server 2008(或有能力升级),您可以查看使用 Change Data Capture 来跟踪何时对您的表进行了更改。此解决方案不涉及更改现有表,但您将进行数据库级别的更改。

    如果无法升级到 2008,您可以创建一组更改跟踪表,并在进行更新时使用触发器来维护它们。

    【讨论】:

      【解决方案3】:

      如果你不能;

      1. 修改数据库以添加时间戳列。
      2. 添加另一个表作为审计日志,从原始表上的触发器馈送

      然后您需要编写一个 ssis 包,在每天结束时将有问题的表格与表格的副本(您前一天获取的)进行比较。然后,您将任何差异记录在新的审计表中。

      【讨论】:

        【解决方案4】:

        不,这是不可能的。 您需要通过将日期字段添加到表的结构中来跟踪它。 我们不能像你说的那样做。

        【讨论】:

          【解决方案5】:

          查询该表是不可能的。

          您可以通过验证 Oracle 中的事务日志来获取该记录。但我不确定在 Sql Serevr 中。

          【讨论】:

            猜你喜欢
            • 2012-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-08
            • 2014-07-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多