首页 / 知识
检查对SQL Server表的更改?
2023-04-11 12:38:00

Check for changes to an SQL Server table?如何在不使用触发器或不以任何方式修改数据库结构的情况下监视SQL Server数据库中对表的更改?我首选的编程环境是.NET和C#。 我希望能够支持任何SQL Server 2000 SP4或更高版本。我的应用程序是另一家公司产品的附加数据可视化。我们的客户群数以千计,因此,我不想在每次安装时都提出要求修改第三方供应商表的要求。 "更改表"是指更改表数据,而不是更改表结构。 最终,我希望更改能够触发我的应用程序中的事件,而不是必须间隔检查更改。
根据我的要求(不进行触发器或架构修改,SQL Server 2000和2005),最好的措施似乎是在T-SQL中使用 每X秒运行一次以下查询:
并将其与储值进行比较。如果值已更改,请使用查询逐行浏览表:
并将返回的校验和与存储的值进行比较。 看一下CHECKSUM命令:
只要表内容未更改,它将在每次运行时返回相同的数字。有关更多信息,请参见我的帖子: CHECKKSUM
当表更改时,我使用它来重建缓存依赖项的方法如下: 不幸的是,CHECKSUM不能始终正常工作以检测更改。 它只是原始校验和,没有循环冗余校验(CRC)计算。 因此,您不能使用它来检测所有更改,例如G。对称的变化导致相同的CHECKSUM!
例如
code> 您为什么不想使用触发器?如果正确使用它们,则是一件好事。如果您将它们用作加强参照完整性的一种方式,那就是它们从好到坏。但是,如果将它们用于监视,则它们并不是真正的禁忌。
您需要多久检查一次更改以及数据库中的表有多大(就行大小而言)?如果使用John建议的 您是否考虑过从另一个角度出发?如果您不想修改架构以添加触发器(从某种意义上说,这不是您的数据库),您是否考虑过与制造数据库的应用程序供应商合作? 他们可以实现一个API,该API提供了一种机制来通知附件应用程序数据已更改。就像写一个通知表列出了被修改的表和行一样简单。可以通过触发器或应用程序代码来实现。从您的角度来看,这无关紧要,您唯一关心的就是定期扫描通知表。对数据库的性能影响远不及扫描每一行的更改。 困难的部分是说服应用程序供应商实现此功能。由于这可以完全通过触发器的SQL处理,因此您可以通过编写和测试触发器,然后将代码带给应用程序供应商来为它们做大量的工作。通过让供应商支持触发器,可以防止您添加触发器而无意间替换了供应商提供的触发器的情况。
不幸的是,我认为在SQL2000中没有一种干净的方法可以做到这一点。如果您将需求范围缩小到SQL Server 2005(及更高版本),那么您就可以开展业务。您可以在 拥有以给定间隔运行的DTS作业(或由Windows服务启动的作业)。每次运行时,它都使用系统INFORMATION_SCHEMA表获取有关给定表的信息,并将此数据记录在数据存储库中。将与表结构有关的返回数据与上次返回的数据进行比较。如果不同,则说明结构已更改。 查询示例以返回有关表ABC中所有列的信息(理想情况下仅列出所需的INFORMATION_SCHEMA表中的列,而不是像我在此处那样使用* select **):
您将根据定义"对表的更改"的精确程度来监视不同的列和INFORMATION_SCHEMA视图。 在这里大胆猜测:如果您不想修改第三方的表,是否可以创建视图,然后在该视图上放置触发器? 检查最后提交日期。每个数据库都有每次提交的历史记录。我相信这是ACID合规性的标准。 |
最新内容
相关内容
python如何操作mysql数据库
python如何操作mysql数据库,培训,标准,项目,密码,数据库,接口,表字,操作,用户,机子,Python标准数据库接口为PythonDB-API,PythonDB-API为开发关于sql Server:将文件存储在数据库
关于sql Server:将文件存储在数据库中而不是文件系统中?,关于sql Server:将文件存储在数据库中而不是文件系统中?,性能,文件系统,文件存关于c#:通用类型检查
关于c#:通用类型检查,关于c#:通用类型检查,类型,布尔,泛型类型参数,方法,Generic type checking有没有一种方法可以强制/限制传递给基元使用 MS Access 作为 MySQL 数据库
使用 MS Access 作为 MySQL 数据库后端的前端的问题?,使用 MS Access 作为 MySQL 数据库后端的前端的问题?,数据库,用户,文件,编写,Iss关于SQL Server:MOSS SSP问题-从已
关于SQL Server:MOSS SSP问题-从已删除的SSP失败的数据库登录,关于SQL Server:MOSS SSP问题-从已删除的SSP失败的数据库登录,的是,生关于数据库:将图像存储在数据库中-
关于数据库:将图像存储在数据库中-是或否?,关于数据库:将图像存储在数据库中-是或否?,位置,图像,应用程序,文件系统,Storing Images in D在性能开始下降之前,MySQL数据库能
在性能开始下降之前,MySQL数据库能达到多少?,在性能开始下降之前,MySQL数据库能达到多少?,性能,数据库,数量,什么时候开始,How big can a关于SQL:数据库索引如何工作?
关于SQL:数据库索引如何工作?,关于SQL:数据库索引如何工作?,索引,数据集,数据库,解释,How does database indexing work?
考虑到索引在关于sql server:由多个用户编辑数据
关于sql server:由多个用户编辑数据库记录,关于sql server:由多个用户编辑数据库记录,服务,应用程序,规范化,用户,Editing database re可以在网络上运行的.net嵌入式数据
可以在网络上运行的.net嵌入式数据库,可以在网络上运行的.net嵌入式数据库,应用程序,嵌入式,数据库,还在,Embedded Database for .ne关于sql:是否存在用于数据库结构更
关于sql:是否存在用于数据库结构更改的版本控制系统?,关于sql:是否存在用于数据库结构更改的版本控制系统?,项目,更改,在对,我正,Is ther使用 JavaScript 修改 Cookie
使用 JavaScript 修改 Cookie,使用,JavaScript,修改,Cookie,使用,JavaScript,修改,,使用 JavaScript 修改 Cookie在 JavaScript 中,