网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: 棘手的问题:如何返回一个不重复的id值?
本主题由 xufeng 于 2008-7-31 11:44 移动
游客
未注册









发表于 2008-8-20 16:01
呵呵,你直接用一下就知道了,newid 是对整个表的记录进行重排

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:01
哦,那改成
create function dbo.gen_id()
returns int
as
begin
declare @r int
exec rid_insert_row
select @r=max(id) from rid_table
return @r
end

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:01
用 output 存储过程来实现


SQL codecreate proc rid_insert_row
@id int output
as
insert into rid_table default values
set @id=@@IDENTITY
--
go

declare @id int
exec rid_insert_row  @id output
select  @id,* from master.dbo.systypes

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:01
啊,都写到这样子了,你都不会用啊,用动态语句不就可以了吗??

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:02
这样不行,返回的值都是相同的,我要的是返回不同的值 ???

你的应用和你的描述,好像偏差比较大,不理解,能说得更清楚一些吗??你要实现什么呢 ???

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:03
你的语句是返回的值都是相同的,我要的是返回不同的值
用动态语句?能否详细点?
前面也说了:用存储过程可以实现,
但是无法在“select dbo.gen_id(),* from 表”中使用,所以请用函数实现

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:03
主要是返回一个id值,就象newid()一样,只是要返回int类型的 ??

哦,明白了,LZ 是想弄一个 相当于 newid() 但是 返回int类型的函数,

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:07
你的語句,執行結果如下:
1 bigint
1 binary
1 bit
….
我要的是下面的執行結果
1 bigint
2 binary
3 bit
….

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:07
建议用 rand() 试试,把范围放大一些,在一定程度上能避免重复,但不是绝对的

引用 回复 顶部
游客
未注册









发表于 2008-8-20 16:07
试试

SQL code

select checksum(newid()),* from master.dbo.systypes

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-12-3 07:30
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.025971 second(s), 9 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP