不太容易。 由于sql server是后触发的。所以你insert时,没有ID,insert 过程就不能执行,
你的触发器没有机会运行。
建议你把insert 过程写在一个存储过程中。先找出当前数据库里的最大ID,然后再insert.

解决方案 »

  1.   

    你可以多加一个COLUMN,存这个增量,每次插入时检查这个值最大是多少,再加一。删除时把比它大的都减一。
      

  2.   

    好像sql server2000的帮助文件中说的只有用触发器
      

  3.   

    根本不需要触发器 ,把这个字段设为identity(我记不太清了),再设置为自动增量.
      

  4.   

    如果这个id字段用不是整型的话,就只能用 max(substr(xx,#))   之类了.
    前段在 sdmagazaine上看到一片文章说,尽量不要把pk放在有具体意义的字段上,如某物的编码等,而要用一个无意义的整型数作为pk,很有道理.
      

  5.   

    关注你的问题,我还没有检查SQL SERVER 2000是否支持before触发,所以无法回答你
      

  6.   

    这样做不成吗?
    insert记录时不用给ID值create trigger mytrigger on table for insert
      update table(ID) = select max(ID)+1 from table
      

  7.   

    3nt:呵呵,看清题目再回答噢。
    bisc_sunny:主键非空。所以insert 时不可能不给ID。
    july:sql server2000是有一个类似于前触发的东东。
      

  8.   

    to yaw 
    就是www.sdmagazine.com
    应该是每个程序员必看的地方。
      

  9.   

    MS SQL在这方面是很弱的。identity可一实现部分功能,但你可以
    做一个测试:
    把identity的字段改为非identity,把原来最大的一个改为最大可
    能的数值,把identity改回去,哈哈,这个表以后也别想insert数据
    了。这说明MS SQL只会在最大数值加一,若数据库量很大,频繁insert/
    delete数据,而identity的字段达到最大,MS SQL不会选择空的可
    用数值,只会加一,导致溢出。
    Informix,甚至其他小型数据库都不会有这样的问题。  :(
      

  10.   

    tomboy好象并没有说ID是Primary Key阿