现在有本地视图,视图里基表是远程表
这个视图主要是用来操作那个基表的,
现在假如有如下的更新
本地视图的定义create view 本地视图
as
select * from 远程数据库服链接别名.远程数据库.dbo.远程表列a 是远程表的聚集索引。
当我在本地执行下面的语句的存储过程时update 远程表 set b ='dfsdfsd' where a = 7508原本应该是锁定表的某一行,可我在监测到远程数据库服上却是表锁。或者页锁。监测到的结果如下。
declare @P1 int
set @P1=1
declare @P2 bigint
set @P2=87010106428922621
exec sp_getschemalock @P1 output, @P2 output, N'"远程数据库"."dbo"."远程表"'
select @P1, @P2
然后下一条语句是
 declare @P1 int
set @P1=180150000
declare @P2 int
set @P2=1
declare @P3 int
set @P3=16388
declare @P4 int
set @P4=1010612
exec sp_cursoropen @P1 output, N'select * from "远程数据库"."dbo"."远程表"', @P2 output, @P3 output, @P4 output
select @P1, @P2, @P3, @P4
接下来是一些提交事务,释放锁的一些语句。请问大虾们这是怎么回事?寻求解决方法。

解决方案 »

  1.   

    但是它更新的时候自动加锁 了。还有,本地传过去远程服务器上SQL语句它都将锁升级了。这是咱回事。如何可以解决。
      

  2.   

    锁升级是将众多细粒度锁转换为较少的粗粒度的锁的过程,以削减系统开销。当事务超过它的升级极限时,Microsoft® SQL Server™ 2000 自动将行锁和页锁升级为表锁。   例如,当事务从表中请求行时,SQL Server 自动获取受影响的行上的锁,并在包含这些行的页和表或者索引上放置更高级别的意向锁。当事务控制的锁数量超过了它的极限时,SQL Server 会试图将表上的意向锁更改为更强的锁(例如,将意向排它 (IX) 锁更改为排它 (X) 锁)。获取更强的锁后,表事务持有的所有页级锁和行级锁都被释放,从而削减锁的开销。   SQL Server 可以为同一查询选择行和页锁定,例如,在索引上放置页锁(如果在非聚集的索引节点中选定了足够的邻接键来满足查询)及在数据上放置行锁。以减少必须进行锁升级的可能性。   锁升级极限是由 SQL Server 动态确定的,无须进行配置。   SQL Server 可以动态升级或降级锁粒度或锁类型。例如,如果更新获取大量行锁而阻塞了表的大部分,将行锁升级到表锁。如果获取了表锁,将释放行锁。SQL Server 2000 很少需要升级锁;查询优化器在编译执行计划时通常选择正确的锁粒度。
      

  3.   

    这个应该是sql控制的,你加上 with rowlock试试
      

  4.   

    加上也不行。exec sp_getschemalock @P1 output, @P2 output, N'"库1"."dbo"."表1"'
    select @P1, @P2
    go
    declare @P1 int
    set @P1=2
    declare @P2 bigint
    set @P2=84248088931770238
    exec sp_getschemalock @P1 output, @P2 output, N'""库1"."dbo"."表1"'请问sp_getschemalock这是什么语句。