我想在一张表中插入新数据.当发现新数据与原数据有相同时.我需要把刚刚插入的数据全部作废 
我目前是新建一张临时表 做为中转 验证后再写入表中 
我知道 事务可以实现.
但是出现问题 当我锁定行时却出现了别的连接不能读取没有锁定的行
比如 
select * from 计划表 where 工号='0111-01'   要锁定 工号是 0111-01 的行  的同时别人能读取和操作 工号是 0111-01 的行要实现怎么做? 
我在程序语言中已经 有 开始事务 和结束事务了

解决方案 »

  1.   

    跳过被锁定的行select * from 计划表 with(readpast) where 工号='0111-01'
      

  2.   

    你都锁定了,别人怎么还能读呢?一般有表级锁with (lock)和行级锁with (rowlock),锁住的记录,别人就不能修改和读取了。还有一种就是不带锁with (nolock),这样别人是可以读写的。
      

  3.   

    用不着事务,直接用 INSTEAD OF 触发器.
    在插入时检测,如果有相同的,则不插入,否则插入.参考:
    http://blog.csdn.net/qianjin036a/article/details/6136588
      

  4.   

    with nolock是读取所有行 包括被事务锁定的行。但是要看是被什么隔离级别锁定的。默认的read commited是可以读到的。