职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1189|回复: 1

有关主键字段ID编号设计及程序实现

[复制链接]
力仔 发表于 2009-9-1 09:43 | 显示全部楼层 |阅读模式
正在做一个工单系统
对于主键ID字段的使用一直没有拿定主意
以前对于ID字段
一般都是用Int或bigint类型
然后使用标识的方式由系统自增长
这种方式最简单
但在后期应用中有很多麻烦之处
没有采用自定义编号的方式方便
但如果是采用主键ID为字符型的自定义编号方式的话
也会带来很多问题
对我来说特别是并发冲突问题
很想得到这有关主键字段ID编号设计及程序实现的帮助
希望大家给点意见或经验之谈
要是有详细的设计方案和程序代码就更好了
对了我用的是SQL2000或2005,程序是VB的
要是有VB的代码就更好了
先上50分
要是对我特有帮助的话再加100分

问题补充:
谢谢一楼的回答
在SQL中处理有一个问题
如何返回刚添加记录的ID编号给程序
在程序中有很多添加记录后要求马上返回ID编号的应用
我用的是VB
麻烦再指点一下
烈火奥拓仔 发表于 2009-9-1 09:43 | 显示全部楼层

有关主键字段ID编号设计及程序实现

你可以用组合的方式来设置id,比如说,我设置一个插入时间的字段 ...
然后另外设置一个组合,通过触发器 来设置id ...
可以前面几位设置为天
091010这是日期 ID ,然后后面 5位 (可以自己设置为几位 ),然后另外设置个索引(identity),但是不当id 使用...

触发器可以这么写,根据插入的日期来设置写入的id ,我只写关键语句的算法.
(插入后触发器)
第一,插入时,获取到插入的日期.就是当前天.

declare @var varchar(10),@maxid int
set @var=convert(varchar(10),getdate(),12)
select @maxid=max(cast(substring(id,7,len(id)) as int ))
from 表名 where substring(id,1,6)=@var
上面就把今天的最大id查出来了,最后再根据触发器里的 临时表inserted
里的索引来设置真正的id ..
然后我们就可以对id进行查了

可以这样啊,获取 @@identity 这个全局变量,我们不是定义了索引了吗? 然后这个就是获取到最后修改的索引.然后再根据这个索引就可以查询出数据了
select @@identity as iden --最后插入记录的索引
相当于一个表中的字段了.然后就可以获取
select ID from table where index=@@identity --获取最后插入的id

日期转换资料,请参见
http://hi.baidu.com/yanzuoguang/ ... 8f0c86a1ec9c69.html
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-4 16:34 , Processed in 0.126023 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表