引用:http://topic.csdn.net/t/20060104/15/4497799.html
问题描述:
错误提示:远程表不可更新。远程表上的可更新键集驱动游标要求事务具有扫过游标的
REPEATABLE_READ
或
SERIALIZABLE
隔离级别。
如何解决?
declare
ml_abc
cursor
local
forward_only
for
select
prd_no,bat_no,qty,cst
from
ldserver.db_sdld.dbo.tf_ml
tf_ml
where
mo_no
=
@mo_no
--根据制令单查询该制令单领料情况
open
ml_abc
fetch
next
from
ml_abc
into
@prd_no,@bat_no,@qty,@cst
while
(@@fetch_status
=
0
)
--通过循环计算该制令单的成本
begin
fetch
next
from
ml_abc
into
@prd_no,@bat_no,@qty,@cst
end
解决:
13
楼rouqu(石林#黄果树)回复于 2006-01-20 18:25:25 得分
85
1 你去检查一下这张表有没有索引 如果有
通过select...into 建一张无索引无主键的表
然后建立这个游标 结果如何?
2 declare
ml_abc INSENSITIVE cursor
local forward_only
for 看什么结果
3 set
transaction isolation level
repeatable read
Begin tran
declare ml_abc
cursor local
forward_only for
select
prd_no,bat_no,qty,cst from
ldserver.db_sdld.dbo.tf_ml
tf_ml where mo_no
= @mo_no
--根据制令单查询该制令单领料情况
open ml_abc
fetch next
from ml_abc
into
@prd_no,@bat_no,@qty,@cst
while (@@fetch_status
= 0 )
--通过循环计算该制令单的成本
begin
fetch next
from ml_abc
into
@prd_no,@bat_no,@qty,@cst
end
set transaction
isolation level
read committed
又是什么结果?
作者的解决方法:
问题已经解决,解决办法用了
rouqu(石林#黄果树) 的方法,
解决办法如下:
declare ml_abc
INSENSITIVE cursor
for
即加上 INSENSITIVE
关键字即可。
附:
游标的敏感性行为定义了对基行(用于建立游标)所做的更新是否对游标可见。敏感性也定义了能否通过游标进行更新。
如果在 Transact-SQL
DECLARE 语句中指定了
INSENSITIVE 关键字,或在
ODBC 中将
SQL_ATTR_CURSOR_SENSITIVITY 设置为
SQL_UNSPECIFIED 或
SQL_INSENSITIVE,游标将不反映数据修改。游标为只读且不支持更新。
如果在 Transact-SQL
DECLARE 语句中省略了
INSENSITIVE 关键字,或在
ODBC 中将
SQL_ATTR_CURSOR_SENSITIVITY 设置为
SQL_SENSITIVE,游标可以反映由当前用户所做的或由其他用户提交的数据修改。除使用只读游标外,可以使用游标进行定位更新。
加载中,请稍候......