如何给SQL Server 6.5的数据库中的一个表产生一个唯一的ID.(200分)

  • 主题发起人 主题发起人 ChenHui
  • 开始时间 开始时间
C

ChenHui

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在SQL Server 6.5的一个用户档案上产生一个唯一的用户号。请
在SQL Server端该如何做,在DelPhi这边该如何做.必须考虑多个人同时输入的问题.
 
SQL Server具体地实现我没做过,但我想可以通过自动增加字段来做
 
生成该表时在SQL Server端的SQL编辑器或者Delphi的query上加入一句SQL语句
CREATE TABLE "xxx.db"
(
CUSTOMER_NO CHAR(20),
NAME CHAR(15),
......
PRIMARY KEY(CUSTOMER_NO)
)
将该用户号设成主键即可
 
SQL Server上没有自动增加字段.另外,方栩可能领会错意思了.我是想在程
序中为CUSTOMER_NO自动产生一个唯一编号。我用SQL Server的触发器和默认字
段做但在DELPHI中新增一条记录(但没有POST)时,却看不到这个关键字.
 
胡说,有的!
如果在程序中做,应该在POST前做,这样减少重复性,可以捕获是否出错.
如果出错,重新生成ID.
 
取一个很大的随机数作为ID, 然后SELECT ID FROM SOMETABLE WHERE ID=这个随机数
返回空集表示ID是唯一可以用的, 如果出现重复(可能性几乎不存在), 则再生成一个随机ID.
再判断
 
用随机数的方法,当记录数已很多的时候再增加新记录恐怕不合适。

可以在数据库中建一表,其中设一数值型字段,记录已用过的最大的值。
生成ID号时,取出该值+1,按一定的规则得到ID,如'abc-00123'等
最后更新字段值+1


 
这个问题讨论好多次了, 可以使用 Sql Server 的 类型为Indentity的字段

定义一个非空字段为整型后,然后在 高级选项里设置该字段设置该字段为 Inentity
字段就可以了

插入过程时,如果是在多人环境下, 建议你使用存储过程,这样做的好处是
插入速度快, 并且可减少锁的问题,
插入动作完成后, 可使用 下面语句将刚刚插入的序列号返回回来

insert into ATable ...........

select @ATempInt= @@Inentity
Retun @ATempInt

第2种方法是做一个小表,表中只记录一条记录,记录当前你要插入的表的ID号数值
那一个客户访问到了这条记录,就给这条记录加一, (注意要锁表),
然后用这条记录记录的数值做ID号去更新你的主数据库就可以了
 
谢谢各位的帮忙,因为一直连不网,所以,未能及时给各位加分,
请多原谅。
 
这个问题,使用identity字段有时往往不合用户需要(int型,且简单递增)。
我想其实可以设置该字段为unique.然后,使用trigger调用存储过程,灵活一些。
典型的一个案例是财务系统中的凭证号 (99010232) ,前四位为年月,后四位为
该年该月中凭证流水号。
 
后退
顶部