sql server 怎么做才能让id这样自动增长?2,4,8,16

waxi 2006-05-19 12:07:33
sql server 怎么做才能让id这样自动增长?2,4,8,16。就2的2次方。在服务端做。不用读出来才写进去。可以做到吗?
...全文
256 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoutians 2006-05-24
  • 打赏
  • 举报
回复
我试了就可以。
waxi 2006-05-23
  • 打赏
  • 举报
回复
2.加一计算列ROW_ID1,公式为POWER(2,ROW_ID)
这个我早就试了不行
Tian987 2006-05-19
  • 打赏
  • 举报
回复
呵呵,这个简单
设该字段为Varchar或text
第一个为1
第二个为10
第三个为100
.
.
.
.
这样就是以2为阶的二进制序号了,如果需要,还可以写个存储过程按进位制转换
luoqun_ncs 2006-05-19
  • 打赏
  • 举报
回复
不知道是不是你要的

CREATE TABLE [dbo].[TABLE1] (
[ID1] [int] IDENTITY (1, 1) NOT NULL ,
[ID2] AS (POWER(2,[ID1])) ,
[NAME] [char] (10)
) ON [PRIMARY]
云中客 2006-05-19
  • 打赏
  • 举报
回复
SQL的标识列可以按一定规律来增加,不过好像不能满足楼主的要求

最后能做个自动生成编号的存储过程或函数来实现
littlebest 2006-05-19
  • 打赏
  • 举报
回复
很奇怪的需求
bthl 2006-05-19
  • 打赏
  • 举报
回复
mislrb(上班看看早报,上上CSDN,下班看看电影) ( ) 信誉:100

日子过的真是逍遥啊,呵呵
mislrb 2006-05-19
  • 打赏
  • 举报
回复
呵呵,同意
jwt1982 2006-05-19
  • 打赏
  • 举报
回复
确实,这个,你表里也放不了多少数据啊!

还是要做个规则,列数据必须符合这个规则?
昵称被占用了 2006-05-19
  • 打赏
  • 举报
回复
bigint 数据类型存储从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 范围内的数字

用LZ的算法算上负数也就只能放127个序号
昵称被占用了 2006-05-19
  • 打赏
  • 举报
回复
不对题的贴上干什么?

LZ的要求比较特殊,不过这样的要求合理吗,用bigint能多少个序号你计算过没有?

我是丁学 2006-05-19
  • 打赏
  • 举报
回复
--邹建写的,改一下就是你要用的
--以下代码生成的编号长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
--创建得到当前日期的视图
CREATE VIEW v_GetDate
AS
SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
GO

--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(12)
AS
BEGIN
DECLARE @dt CHAR(6)
SELECT @dt=dt FROM v_GetDate
RETURN(
SELECT @dt+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6)
FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%')
END
GO

--在表中应用函数
CREATE TABLE tb(
BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)

--插入资料
INSERT tb(col) VALUES(1)
INSERT tb(col) VALUES(2)
INSERT tb(col) VALUES(3)
DELETE tb WHERE col=3
INSERT tb(col) VALUES(4)
INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)

--显示结果
SELECT * FROM tb
/*--结果
BH col
------------------- -----------
050405000001 1
050405000002 2
050405000003 4
050405000004 14
--*/
zoutians 2006-05-19
  • 打赏
  • 举报
回复
实现这个很简单呀。

1.加一自动增长列ROW_ID,步长为1
2.加一计算列ROW_ID1,公式为POWER(2,ROW_ID)

搞定。
Tian987 2006-05-19
  • 打赏
  • 举报
回复
这个要求实在变态啊

我上面说的办法还可以用16进制数实现,可以省些字节

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧