游标是read only 只读不写,所以不用WITH(UPDLOCK)

解决方案 »

  1.   

    使用 READ ONLY 或 INSENSITIVE 游标时不能指定 UPDLOCK 或 TABLOCKX。
    在游标中的只读表上,不能指定 UPDLOCK 或 TABLOCKX。
      

  2.   

    UPDLOCK 读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。
      

  3.   

    感谢各位的回答,可是我的游标没有定义成read only的 只是默认类型的。表也不是只读表。DECLARE cur1 CURSOR FOR
    SELECT TOP  convert(varchar,@MoveUnit) 
    t.UserNumber,
    t.ExpressTicketNumber
    FROM  @FromTableName  AS t WITH(UPDLOCK)
    INNER JOIN VI_T_EtTicketInfo AS v ON  v.UserNumber = t.UserNumber
    AND v.ExpressTicketNumber = t.ExpressTicketNumber
    WHERE v.DepartureDate < convert(varchar,convert(datetime,@DateCondValue), 112)
    之后是用抽出数据对其他的表进行更新和插入
    最后 DELETE FROM  @FromTableName WHERE CURRENT OF cur1罗嗦了一大堆,麻烦各位了。