首页 新闻 会员 周边 捐助

怎么把表中的一个字段设置成跟id一样的值

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-05 16:17

一个表中有id,code两个字段(还有其他字段,不列举了),id是int类型自动增长,code是varchar类型,我在页面后台写添加方法的时候如何让code的值跟id的值一样?

Andylls的主页 Andylls | 初学一级 | 园豆:5
提问于:2012-08-29 18:18
< >
分享
最佳答案
0

如果数据量不大

使用触发器,或者在插入数据后执行下面更新
update table

set  code=convert(varchar(20),id)

where code is null    

--数据量大的时候只更无CODE值

收获园豆:20
acepro | 小虾三级 |园豆:1218 | 2012-08-29 19:52

触发器学时学过,但一直没用过,不知道怎么弄,能否写下?谢谢!

Andylls | 园豆:5 (初学一级) | 2012-08-30 11:17

@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
acepro | 园豆:1218 (小虾三级) | 2012-09-05 18:18
其他回答(7)
0

这个可以这样实现:

1     /**
2      * 1.在保存数据之前,查询一次数据库中有多少条记录
3      *   如:select count(id) from table;
4      * 2.从第一步的结果中,把值赋值给code字段(注意这里++code哦)
5      * 3.保存数据
6      */
Hongten | 园豆:1768 (小虾三级) | 2012-08-29 18:29

如果删除某条记录之后,自增字段id是不连续的,你这样count(id)出来行不通滴吧?

支持(0) 反对(0) 八戒的师傅 | 园豆:1472 (小虾三级) | 2012-08-30 00:16

@八戒的师傅:

你说的很有理,还有一种办法:

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       */
支持(0) 反对(0) Hongten | 园豆:1768 (小虾三级) | 2012-08-30 00:41
0

如果是程序插入可以放到一个业务逻辑中:

每插入一条记录时读取到id,再update给这条记录对应的code

如果是用脚本在查询分析器中直接插入可以加触发器:

每次插入都触发最大id那条记录的Update

田林九村 | 园豆:2367 (老鸟四级) | 2012-08-29 22:39
0

个人觉得,如二楼所说,触发器似乎是个不错的选择了

八戒的师傅 | 园豆:1472 (小虾三级) | 2012-08-30 00:17

触发器学时学过,但一直没用过,不知道怎么弄,能否写下?谢谢!

支持(0) 反对(0) Andylls | 园豆:5 (初学一级) | 2012-08-30 11:18
0

使用 select @@Identity 返回新插入的id, 然后做个 update 呗   update table set code = id where id = @newId

gunsmoke | 园豆:3592 (老鸟四级) | 2012-08-30 06:56
0

好象都是要去查询,有没有办法通过存储备过程不查询就能得到的

jason2013 | 园豆:1998 (小虾三级) | 2012-08-30 10:18
0

还是用触发器吧,select @@Identity返回是新插入的ID,可也有个时间差的问题,虽说这种机率很小

山雨-B | 园豆:234 (菜鸟二级) | 2012-08-30 10:19

触发器学时学过,但一直没用过,不知道怎么弄,能否写下?谢谢!

支持(0) 反对(0) Andylls | 园豆:5 (初学一级) | 2012-08-30 11:18
1

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)
)
眯妖 | 园豆:1020 (小虾三级) | 2012-09-01 10:34

学习了

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2012-10-08 17:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册