以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 关于用哪种类型的ID的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91002) |
-- 作者:zhy400137 -- 发布时间:2016/9/27 13:37:00 -- 关于用哪种类型的ID的问题 关于在网络状态下生成不重复ID的解决办法,现在知道的方法有: 1、用OPENQQ(这个还在学习中,而且有时候怕是用不到) 2、自增列(有时要将自增ID用做和其他表关联时,会出现保存后变化的情况,且听说数据迁移时很麻烦) 3、GUID(这个还不太明白) 现在是要生成有一定格式的编号,比如:出库 CK-001,002.…… 这样的编号除了OPENQQ外还有什么方法在网络状态且多并发的情况下生成不重复编号吗?谢谢!
|
-- 作者:zhy400137 -- 发布时间:2016/9/27 13:40:00 -- 自己照帮助改了个内部函数,但听有点蓝版主说会有重复编号 Dim getbh As String \'return 编号,pf 是前缀 Dim nm As String=Args(0) \'读参数1,表名 Dim pf As String=Args(1) Dim bhformat As String = Args(2) Dim cmd1 As New SQLCommand Dim cmd2 As New SQLCommand Dim Key As Integer cmd1.ConnectionName = DataSource \'设置数据源名称 cmd2.ConnectionName = DataSource cmd1.commandText = "Select Count(*) F rom [getnumberid] Where [前缀] = \'" & pf & "\' And 表名 = \'" & nm & "\'" If cmd1.ExecuteScalar = 0 Then \'如果编号表不存在前缀的行,那么增加一行 cmd1.commandtext = "Inser t Into getnumberid (表名, 前缀, 顺序号) Values(\'" & nm & "\',\'" & pf & "\',1)" cmd1.ExecuteNonQuery End If cmd1.commandText = "Select [顺序号] F rom [getnumberid] Where [前缀] = \'" & pf & "\' And 表名 = \'" & nm & "\'" Do Key = cmd1.ExecuteScalar() \'从后台获得顺序号 cmd2.commandText = "U pdate [getnumberid] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\' And 表名 = \'" & nm & "\'" If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号 Exit Do \'更新成功则退出循环 End If Loop getbh = pf & "-" & Format(Key,bhformat) Return getbh |
-- 作者:有点蓝 -- 发布时间:2016/9/27 14:52:00 -- 2楼的方式可行,一般不会有问题,http://www.foxtable.com/webhelp/scr/1994.htm sqlserver也可以设置为存储过程,减少几条sql执行的时间差,如 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=61811 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=61848 |