gpt4 book ai didi

sql-server - 您如何知道自上次使用以来 SQL 表是否已更改?

转载 作者:行者123 更新时间:2023-12-04 01:08:22 25 4
gpt4 key购买 nike

有没有办法知道 SQL Server 2008 R2 表中的数据自上次使用以来是否发生了变化?我想知道任何类型的更改——是插入了新记录还是修改或删除了现有记录。

我对可能发生的特定变化不感兴趣。我只对指示表数据是否已更改的 bool 值感兴趣。

最后,我想要一个简单的解决方案,它不涉及为每个 CRUD 操作编写触发器,然后让该触发器更新其他一些日志表。

我有 C# 程序,旨在将大量初始数据插入某些数据库表中。这是一种一次性操作,在应用程序的生命周期中应该只发生一次,或者很少再发生。然而,在开发和测试过程中,我们经常使用这个程序。

目前,它有大约 10 个表插入数据,每个表有大约 21,000 行,程序运行需要大约 45 秒。这并不是一个真正的大问题,因为这是一次性操作,无论如何都要在将产品运送给客户之前在内部完成。

不过,我想尽量减少这个时间。因此,如果自我的程序上次使用以来表数据没有发生变化,我不想将数据插入到表中。

我的同事告诉我,我可以使用 CHECKSUM_AGG T-SQL 中的函数。我的问题是:

1) 如果我计算 CHECKSUM_AGG(Cast(NumericPrimaryKeyIdColumn AS int)) ,那么校验和仅在添加新行或删除现有行时才会更改,对吗?如果有人只修改了表中现有行的其他列的值,那不会对 ID 列的校验和聚合产生影响,对吗?或者会吗?

2)有没有另一种方法可以解决我的程序上次使用表数据是否发生变化的问题?

最佳答案

这与我已经想到的以及@user3003007 提到的非常接近。

我想到的一种方法是采取 CHECKSUM(*)CHECKSUM(Columns, I, Am, Interested, In)对于每个这样的表,然后对每一行的校验和进行聚合校验和,如下所示:

SELECT CHECKSUM_AGG(CAST(CHECKSUM(*) as int)) FROM TableName;

这仍然不是一种可靠的方法,因为 CHECKSUM 不适用于某些数据类型。因此,如果我的列类型为 textntext ,CHECKSUM 将失败。

对我来说幸运的是,我感兴趣的列列表中没有这样的数据类型,所以这对我有用。

关于sql-server - 您如何知道自上次使用以来 SQL 表是否已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20038494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com