一个表中有id,code两个字段(还有其他字段,不列举了),id是int类型自动增长,code是varchar类型,我在页面后台写添加方法的时候如何让code的值跟id的值一样?
如果数据量不大
使用触发器,或者在插入数据后执行下面更新
update table
set code=convert(varchar(20),id)
where code is null
--数据量大的时候只更无CODE值
触发器学时学过,但一直没用过,不知道怎么弄,能否写下?谢谢!
@Andylls:
create TRIGGER [dbo].[Trigger_Name] ON [dbo].[TableName] AFTER INSERT AS BEGIN SET NOCOUNT ON; update table set code=convert(varchar(20),id) where code is null SET NOCOUNT OFF; END
这个可以这样实现:
1 /** 2 * 1.在保存数据之前,查询一次数据库中有多少条记录 3 * 如:select count(id) from table; 4 * 2.从第一步的结果中,把值赋值给code字段(注意这里++code哦) 5 * 3.保存数据 6 */
如果删除某条记录之后,自增字段id是不连续的,你这样count(id)出来行不通滴吧?
@八戒的师傅:
你说的很有理,还有一种办法:
1 /** 2 * 1.在保存数据之前,查询一次数据库中id的一个list 3 * 如:select id from table order by id desc; (这样最后一条记录就在最前面) 4 * 2.从第一步的结果中,把查询出来的list的list.get(0)这条记录中的id值赋值给code字段(注意这里++code哦) 5 * 3.保存数据 6 */
如果是程序插入可以放到一个业务逻辑中:
每插入一条记录时读取到id,再update给这条记录对应的code
如果是用脚本在查询分析器中直接插入可以加触发器:
每次插入都触发最大id那条记录的Update
个人觉得,如二楼所说,触发器似乎是个不错的选择了
触发器学时学过,但一直没用过,不知道怎么弄,能否写下?谢谢!
使用 select @@Identity 返回新插入的id, 然后做个 update 呗 update table set code = id where id = @newId
好象都是要去查询,有没有办法通过存储备过程不查询就能得到的
还是用触发器吧,select @@Identity返回是新插入的ID,可也有个时间差的问题,虽说这种机率很小
触发器学时学过,但一直没用过,不知道怎么弄,能否写下?谢谢!
Code和id是完全一样的吗?若是这样就可以将Code设计为公式字段:
create table testTB ( id int identity(1,1) not null primary key, code as convert(varchar(20),id),--公式字段,将id转换成varchar型后赋给code TestValue varchar(50) )
学习了