sql server中如何用“触发器”实现自动增量?, 不太容易。 由于sql server是后触发的。所以你insert时,没有ID,insert 过程就不能执行,你的触发器没有机会运行。建议你把insert 过程写在一个存储过程中。先找出当前数据库里的最大ID,然后再insert. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以多加一个COLUMN,存这个增量,每次插入时检查这个值最大是多少,再加一。删除时把比它大的都减一。 好像sql server2000的帮助文件中说的只有用触发器 根本不需要触发器 ,把这个字段设为identity(我记不太清了),再设置为自动增量. 如果这个id字段用不是整型的话,就只能用 max(substr(xx,#)) 之类了.前段在 sdmagazaine上看到一片文章说,尽量不要把pk放在有具体意义的字段上,如某物的编码等,而要用一个无意义的整型数作为pk,很有道理. 关注你的问题,我还没有检查SQL SERVER 2000是否支持before触发,所以无法回答你 这样做不成吗?insert记录时不用给ID值create trigger mytrigger on table for insert update table(ID) = select max(ID)+1 from table 3nt:呵呵,看清题目再回答噢。bisc_sunny:主键非空。所以insert 时不可能不给ID。july:sql server2000是有一个类似于前触发的东东。 to yaw 就是www.sdmagazine.com应该是每个程序员必看的地方。 MS SQL在这方面是很弱的。identity可一实现部分功能,但你可以做一个测试:把identity的字段改为非identity,把原来最大的一个改为最大可能的数值,把identity改回去,哈哈,这个表以后也别想insert数据了。这说明MS SQL只会在最大数值加一,若数据库量很大,频繁insert/delete数据,而identity的字段达到最大,MS SQL不会选择空的可用数值,只会加一,导致溢出。Informix,甚至其他小型数据库都不会有这样的问题。 :( tomboy好象并没有说ID是Primary Key阿 sql server服务管理器没有可选的服务器 为什么列名无效? union order by 问题 SQL怎么连续两张表 SQL server语句中有没有用来运算二进制的语法呢 请问如何人为的让数据库或里面的某个文件(或文件组)处于蹦溃状态? 请教一个面试中遇到的SQL语句的查询问题 月报表统计的问题 数据库还原的问题 insert语句中可以加变量么?这个变量怎样从库中导出? 脑筋急转弯!!!快开来看看 come on, ok?
前段在 sdmagazaine上看到一片文章说,尽量不要把pk放在有具体意义的字段上,如某物的编码等,而要用一个无意义的整型数作为pk,很有道理.
insert记录时不用给ID值create trigger mytrigger on table for insert
update table(ID) = select max(ID)+1 from table
bisc_sunny:主键非空。所以insert 时不可能不给ID。
july:sql server2000是有一个类似于前触发的东东。
就是www.sdmagazine.com
应该是每个程序员必看的地方。
做一个测试:
把identity的字段改为非identity,把原来最大的一个改为最大可
能的数值,把identity改回去,哈哈,这个表以后也别想insert数据
了。这说明MS SQL只会在最大数值加一,若数据库量很大,频繁insert/
delete数据,而identity的字段达到最大,MS SQL不会选择空的可
用数值,只会加一,导致溢出。
Informix,甚至其他小型数据库都不会有这样的问题。 :(