K kaimi Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-27 #1 我以前用产生GUID的方法作为各个表的主关键字,因为是字符串型,并且长度到42, 如果数据量大了,可能会影响查询效率,能否用一种比较好的算法形成整数型数值? 希望推荐一种比较好的方法。谢谢!
T tanglu Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-27 #4 最好用一个没有逻辑意义的数字来表示。并用程序控制其增加。
K kaimi Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-27 #5 我们的数据库在不同地点录入后再汇总到总部,当然主关键字不变,用自增整数显然不行, 还有什么好方法吗?
B BaKuBaKu Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-02 #7 To Kaimi : 如果你的主关键字除了保持记录的唯一性之外没有别的意义,那么定义成 Identity 类型 就足够了,汇总数据的时候不必把这个字段带过来,系统会自动生成唯一的值。 如果你的主关键字还有别的具体意义,比如单据编号,那么显然必须人工介入,规定关键 字取值范围,例如:A 部门的单据编号以“A”开头,就不会重复了。 就是这样的,看你采用什么方案了。
To Kaimi : 如果你的主关键字除了保持记录的唯一性之外没有别的意义,那么定义成 Identity 类型 就足够了,汇总数据的时候不必把这个字段带过来,系统会自动生成唯一的值。 如果你的主关键字还有别的具体意义,比如单据编号,那么显然必须人工介入,规定关键 字取值范围,例如:A 部门的单据编号以“A”开头,就不会重复了。 就是这样的,看你采用什么方案了。
H hhzh426 Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-03 #9 各个分部的数据库中用自增字段,汇总时用:部门编号-自增字段(转成字符型)获取字符型 的统一编号行吗?
O onedot Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-03 #10 agree BaKuBaKu 另外你可以在表中设置一个int类型字段作为你的不重复主键,每次insert操作时 insert your_table (your_index,.....) values (now_index=select max(your_index)+1 from your_bable,.......)
agree BaKuBaKu 另外你可以在表中设置一个int类型字段作为你的不重复主键,每次insert操作时 insert your_table (your_index,.....) values (now_index=select max(your_index)+1 from your_bable,.......)
O onedot Unregistered / Unconfirmed GUEST, unregistred user! 2000-11-03 #11 当然不要误解我意思,自然SQL语句直接那么写会错的。 我意思是程序每次得到插入前的最大值,然后加1作为这次插入的值。 //这个工作最好防在一个存储过程里,自动在里面先取到上次最值,然后加1后插入! 这样也保证并发控制不会出现冲突!!! eg: CREATE PROCEDURE my_insert @my_one int, @my_two char(9),......//你的插入变量 declear @old_index as select @old_index=max(your_index) from your_table if isnull(@old_index) then @old_index=0 insert your_table (your_index,.......) values (@old_index+1,@my_one,@my_two,...)
当然不要误解我意思,自然SQL语句直接那么写会错的。 我意思是程序每次得到插入前的最大值,然后加1作为这次插入的值。 //这个工作最好防在一个存储过程里,自动在里面先取到上次最值,然后加1后插入! 这样也保证并发控制不会出现冲突!!! eg: CREATE PROCEDURE my_insert @my_one int, @my_two char(9),......//你的插入变量 declear @old_index as select @old_index=max(your_index) from your_table if isnull(@old_index) then @old_index=0 insert your_table (your_index,.......) values (@old_index+1,@my_one,@my_two,...)