Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
C# SQL Server“;检查数据库表是否有一个正在进行的进程;_C#_Sql Server_Sql Server 2000 - Fatal编程技术网

C# SQL Server“;检查数据库表是否有一个正在进行的进程;

C# SQL Server“;检查数据库表是否有一个正在进行的进程;,c#,sql-server,sql-server-2000,C#,Sql Server,Sql Server 2000,我想做的是,通知用户我的程序“数据库中正在进行更新,因此结果可能不正确。”因此,我必须检查我的程序使用的表上是否有某些进程(如写入或删除) 编辑:我更新表格的方式是使用MS Access,从MS Excel复制大约10.000行,并使用MS Access将其粘贴到数据库中。因此,当复制粘贴正在进行时,我希望能够从基于web的程序中看到它 谢谢。在某个地方(在过程中,或者在服务器上,在文件或共享内存中等)创建一个共享计数器。你的更新是这样的吗 increment the counter query

我想做的是,通知用户我的程序“数据库中正在进行更新,因此结果可能不正确。”因此,我必须检查我的程序使用的表上是否有某些进程(如写入或删除)

编辑:我更新表格的方式是使用MS Access,从MS Excel复制大约10.000行,并使用MS Access将其粘贴到数据库中。因此,当复制粘贴正在进行时,我希望能够从基于web的程序中看到它


谢谢。

在某个地方(在过程中,或者在服务器上,在文件或共享内存中等)创建一个共享计数器。你的更新是这样的吗

increment the counter
query(UPDATE blablabla)
decrement the counter
如果计数器大于0,则显示消息


(但这是你真正想要的吗?请看评论)

我不确定我是否理解你在这里想要实现的目标

SQL Server为您管理数据的完整性和一致性,前提是您使用合适的隔离级别

因此,如果计数/报告查询尝试访问当前正在更新的记录,则在更新操作完成之前,它将无法获取共享锁(在当前正在更新的记录上),从而确保仅报告提交的数据。因此,报告在完成时是正确的


如需进一步阅读,请参阅:更新,回复:

“编辑:我更新表格的方式是使用MS Access,从MS Excel复制大约10.000行,然后使用MS Access将其粘贴到数据库中。因此,在复制粘贴过程中,我希望能够从基于web的程序中看到它。”

原理是一样的,在粘贴过程开始时,添加一个DB行,就像我的第一个答案一样。或者,您可以在web应用程序中设置一个全局变量,类似于
updateInProgress=true

但是,这本书需要多长时间?如果少于5分钟,那么可能不值得做任何其他事情

如果您只是想让用户知道有“新鲜”数据,可以查询最近的日期时间


什么样的更新?通常,SQL Server使用默认事务锁定来保持结果的准确性

也许你的意思是一个长期的数据导入工作?或者,天哪,是某种密集的、光标驱动的过程

然后你可以做一些类似的事情:

  • 在数据库中创建一个表。称之为LongJobLog。它可能有3列:ID、开始日期时间和结束日期时间

  • 在每个长作业开始时,在此表中添加新的开始时间,确保将新ID保存到变量中

  • 当作业结束或出错时,使用endtime更新ID的行

  • 应用程序将在此表中查询最近的行(按开始时间),这些行的结束时间仍然为空。如果存在这样的行,则“更新”正在进行中

  • 您可能需要一个cron作业来清除作业崩溃的条目


  • 或者,SQL日志中可能提供此开始-停止信息。不过,整理它可能需要一些工作。

    你不能这样做,以使更新永远不会与读取同时进行,例如事务?永远不要实现你自己的更新locking@gbn为什么不呢?有时,您需要做的不仅仅是更新数据库(编写常规文件或其他),在这种情况下,使用数据库提供的功能是没有意义的。锁定表上的并发性也会有同样的问题。。。如果您不想等待,可以设置@locktimeout,例如。同样在这种情况下,客户端命令超时会发生什么情况?您的计数器保持>0=拧紧…@gbn,然后制作一个具有超时的智能计数器。是的,一定要小心。不,这不是火箭科学。但是,如果数据库确实提供了一个合适的选项(我之前评论中的限制不适用),我当然同意应该使用该选项。