在做了一些阅读之后,很明显多个过程可以修改全局变量@@Fetch_Status
。我们有一个存储过程,它每小时调用一次其他存储过程(有点像表驱动的触发器,这样客户端可以控制但不必触摸一个触发器)。所以这个调用这些子过程的父过程使用游标。一些子过程也可以使用游标。
我知道每次Fetch Next
调用之后几乎都会立即@@Fetch_Status
调用,但是由于并行发生的事情,我不确定调用是否@@Fetch_Status
是线程安全的,尤其是考虑到此处的备注部分。所以我认为将我所有的电话替换为类似的东西是一个好主意While @@Fetch_Status = 0)
WHILE ( (SELECT fetch_status
FROM sys.dm_exec_cursors(0)
where name = 'server_cursor')=0) BEGIN
这在我的计算机上效果很好,但是当我将它移到客户端计算机上时,我了解到我没有对sys.dm_exec_cursors(0)
表的选择权限。我得到错误The user does not have permission to perform this action.
。
或者,如果我尝试select * from sys.syscursors
我得到错误The SELECT permission was denied on the object 'syscursors', database 'mssqlsystemresource', schema 'sys'.
是否有另一种方法可以确保多个同时游标不会相互踩踏?还是我在这里工作太辛苦了?