有点难:我要写一个Proc或函数用来生成一个数据库中的所有表的主健值(也就是任何表的主健值不可能重复),我想用long int类型来定义主健, 用GUID类型的缺陷是编码没有规律,不具有可读性. 另外编码较长,影响处理效率.编码生成的算法比较复杂,对数据处理效率有一定影响.优点是使用简单. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样做有必要吗?所有的主键都是一个吗?而且数据多了很可能会溢出的不如用GUID要么就做一个字符串yyyyMMdd99999999专门做一个表保存当天最大的序号,每次获取新的ID后,对序号进行更新 我的想法就是用long int 来实现 GUID字段功能,"任何表的主健值不可能重复" 的意思就是在任何表插入新纪录时,该记录的主健都通过统一的Proc或函数获取一个唯一的long int值(可以使用自增) --无论使用自增列,还是普通列,都不能用函数,用户定义函数只允许读取表.--可以这样处理--1.使用自增列create table tb_bh(id bigint identity,a bit)go--生成编号的存储过程create proc p_getbh@re bigintasinsert tb_bh(a) values(1)set @re=scope_identity()go--2.使用普通列create table tb_bh(bh bigint)go--生成编号的存储过程create proc p_getbh@re bigintasbegin tran select @re=bh+1 from tb_bh with(xlock,tablock) if @@rowcount=0 begin insert tb_bh values(1) set @re=1 end else update tb_bh set bh=@recommit trango 谢谢zjcxc(邹建) 老兄 ,不知道这种方法的效率与GUID相比谁更好一点???? 查询效率当然比guid好.处理的效率就难说了,估计是差不多复杂度来说,肯定是比guid复杂(从使用的角度) 请问怎么判断连接的SQL Server 是在本地啊 大家快来帮帮小弟sqlserver+vs2003 请问一个union 中怎样使用表别名??? 如何在一条查询语句中执行建表操作(有点点难度哦)!高手请进!! 存储过程中建view得問題 SQL2000一个表里的数据删了怎么恢复 没有备份 关于SQL数据库安装 数据库问题 有没有办法将两个结构类似的表的关键字段与另外一个表进行外键绑定? 如何远程操作管理网站的SQL server? 怎样实现自动计算? 急救 一个安装问题!!!!!!
所有的主键都是一个吗?
而且数据多了很可能会溢出的
不如用GUID
要么就做一个字符串yyyyMMdd99999999
专门做一个表保存当天最大的序号,每次获取新的ID后,对序号进行更新
"任何表的主健值不可能重复" 的意思就是在任何表插入新纪录时,该记录的主健都通过统一的Proc或函数获取一个唯一的long int值(可以使用自增)
--1.使用自增列
create table tb_bh(id bigint identity,a bit)
go--生成编号的存储过程
create proc p_getbh
@re bigint
as
insert tb_bh(a) values(1)
set @re=scope_identity()
go--2.使用普通列
create table tb_bh(bh bigint)
go--生成编号的存储过程
create proc p_getbh
@re bigint
as
begin tran
select @re=bh+1 from tb_bh with(xlock,tablock)
if @@rowcount=0
begin
insert tb_bh values(1)
set @re=1
end
else
update tb_bh set bh=@re
commit tran
go