Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 记录对SQL Server数据库的更改并将其发送到客户端的最佳方法?_Php_Sql Server_Ajax_Sql Server 2008 - Fatal编程技术网

Php 记录对SQL Server数据库的更改并将其发送到客户端的最佳方法?

Php 记录对SQL Server数据库的更改并将其发送到客户端的最佳方法?,php,sql-server,ajax,sql-server-2008,Php,Sql Server,Ajax,Sql Server 2008,我有一个简单的SQL Server数据库,有12个表。每个表有100到1000行。当我的web应用加载时,这些表直接保存到数组中。从那时起,将使用数组,而不是直接访问表。每当其他用户更改数据库中的数据时,都需要更新阵列 为此,我计划使用ajax每10秒轮询一个PHP脚本。此脚本检查这12个表中的任何一个表上的更改,并仅将所做的更改返回到客户端计算机,而不是整个表 问题是,我不知道如何记录对这12个表的任何更改,然后将这些更改返回到客户机,以便可以用Javascript解释这些更改以更新数组 跟踪

我有一个简单的SQL Server数据库,有12个表。每个表有100到1000行。当我的web应用加载时,这些表直接保存到数组中。从那时起,将使用数组,而不是直接访问表。每当其他用户更改数据库中的数据时,都需要更新阵列

为此,我计划使用ajax每10秒轮询一个PHP脚本。此脚本检查这12个表中的任何一个表上的更改,并仅将所做的更改返回到客户端计算机,而不是整个表

问题是,我不知道如何记录对这12个表的任何更改,然后将这些更改返回到客户机,以便可以用Javascript解释这些更改以更新数组

跟踪SQL Server中表的更改的最佳/最简单的方法是什么



也许是问我的问题的一种更清晰、适用范围更广的方式—有哪些方法可以查询或发现SQL Server表随时间的变化?

我相信我一眼就看错了你的问题,但看起来你是在将数据存储在javascript数组中。如果是这样,请在javascript中保留一个“上次更新”的时间戳,并在数据库中维护一个“上次更新”列。正如其中一条评论所说,在这里实际编写代码有点多,但有一个想法:

initial.php-加载包含javascript变量内存中所有数据的页面,此页面将轮询checkforupdates.php?lastUpdate=[最近更新的时间戳]

checkforupdates.php-运行带有“WHERE lastUpdate>providedTimestamp”的SQL查询,echo json_encode($data)


这足以为您指明正确的方向吗?

您还可以研究变更数据捕获。这听起来正是你需要的。这是BOL:。 以下是皮纳尔·戴夫的一篇文章:


基本上,它记录所有更改(插入、更新和删除),并允许您从系统表中提取信息。不幸的是,除了给您指出正确的方向之外,我自己对这方面的了解还不够。

通读缓存。当数据发生变化时,使缓存失效。有很多很多方法可以做到这一点,但没有一种方法足够简单,我们不想为您编写。您不想只查询表有什么原因吗?这怎么会太本地化了?因为我提供了太多关于我具体案例的信息?想要在本地数据和服务器端数据之间创建对等,而不是世界各地的程序员每天都在处理的事情,这是怎么回事?我只是在寻找一些关于使用SQL Server实现这一点的方法的建议,而不是为我写的所有文章。类似于我得到的建议——读取缓存,保留最后一次更新的表或字段,以及更改数据捕获——这正是我一直在寻找的以及其他许多人可能需要的!“太本地化”?认真地这根本没有道理。“不是建设性的”,因为它可能太开放,或者如果它看起来太面向数据库,那么就脱离主题,但太本地化是荒谬的。我同意你早些时候的评论,dallin。如果它是“本地化”的,那么为什么微软会在SQL Server 2008中构建一个而不是两个特定的工具来准确地处理您正在寻找的内容?如果应用程序允许删除,您必须考虑删除。谢谢!这与我的想法是一致的。如果我需要支持SQLServer2005,我可能会采用这种方法。否则,Kenneth的回答让我想到了更改跟踪,这是SQLServer2008中的一个集成功能,可以解决这个问题。谢谢Kenneth!这正是我要找的!在调查了CDC之后,我发现SQLServer2008有两种解决方案——变更数据捕获和变更跟踪。更改跟踪也做同样的事情,但重量更轻,包含在SQL Server Express中,但缺少更改前数据的历史记录。这两种解决方案在SQLServer2008中都是新的,在此之前需要一个自定义解决方案。谢谢你的回答!