定义服务器游标的属性 将远程表上的数据复制到本地

在本地服务器上,我用了一个 数据库链接 连接到 远程服务器。由于需要将远程表上的一些数据更新到本地服务器上,我写了一个sp。执行这些语句的时候,虽然数据已经成功抄下来,但会提示出错,如果用计划任务执行的话是不会成功的。

declare mcursor cursor for
        
select branch_code from [192.168.3.51].dbname.dbo.table where obsoleted = 'F'
    
open mcursor
    
close mcursor
    
deallocate mcursor

错误提示:远程表不可更新。远程表上的可更新键集驱动游标要求事务具有扫过游标的 REPEATABLE_READ 或 SERIALIZABLE 隔离级别。
(Remote tables are not updatable. Updatable keyset-driven cursors on remote tables require a transaction with the REPEATABLE_READ or SERIALIZABLE isolation level spanning the cursor.)

这种错误是什么原因导致的呢,原因就是远程表上的游标不可更新。解决办法 1 如下:

declare INSENSITIVE mcursor cursor for
        
select branch_code from [192.168.3.51].dbname.dbo.table where obsoleted = 'F'
    
open mcursor
    
close mcursor
    
deallocate mcursor

附:
sqlserver帮助里面的相关帮助。

INSENSITIVE

定义一个游标,以创建将由该游标使用的数据的临时复本。对游标的所有请求都从 tempdb 中的这一临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。使用 SQL-92 语法时,如果省略 INSENSITIVE,则已提交的(任何用户)对基础表的删除和更新都反映在后面的提取中。



posted @ 2006-01-21 15:03  小强(占卜师)  阅读(1845)  评论(4编辑  收藏  举报