如果用触发器
delete kemployce where kcode in (select kcode from inserted)
insert kemployce select * from inserted
报错:仅当使用列的列表,并且identity_insert 为 on 时,才能在表..指定显示值请各位给出  其它的  好的办法呀!

解决方案 »

  1.   

    delete kemployce where kcode in (select kcode from inserted)
    insert kemployce (kcode,kname) select kcode,kname from inserted
      

  2.   

    MSSQL的触发器为事后触发,故
    delete kemployce where kcode in (select kcode from inserted)
    insert kemployce select * from inserted
    是不行的,如果要使用触发器可以使用
    INSTEAD OF 触发器
      

  3.   

    大力,你的方法倒是可以,但必须要牺牲kcode作为主键了!!! 惨!
      

  4.   

    不改变kcode作为主键create trigger T_rrr on kemployce
    instead of  insert
    asdelete kemployce where kcode in (select kcode from inserted)
    insert kemployce select * from inserted但你的id顺序将会打乱,插入的新数据只会再原来基础上递增
    比如插入kcode=000001 kname =小猫的妈妈 id将为4
      

  5.   

    最有效的办法是将kcode作为主键!
      

  6.   

    kcode作为主键或加唯一性约束,编辑数据时,利用应用程序的异常机制(捕获并判断异常如违反主键或唯一性约束),库中必存在此主键的值!然后再做下一步处理!
    愚见,仅供参考!
      

  7.   

    同意happydreamer的做法!
    使用instead of 触发器!
    这样的话就可以不执行引起instead of trigger的语句,而执行instead of trigger的语句!
      

  8.   

    呵呵。这里的人真牛呀!
    happydreamer 的方法可行!但现在有个问题,在这之前我已经牺牲了一个image 字段。能起死回生不?(之前报错:表在有image 字段 不能用此方法触发)
      

  9.   

    你为什么不是直接放弃insert阿,还要删除了再添加?
      

  10.   

    to  firetoucher 你看清我的问题没呢。 打算给分了,反正image 救不回了,舍不得孩子套不住狼呀! :)