高分求教,刚入道请多多指教

fangming 2004-12-10 10:55:21
请教:当往数据库里插入一条记录时,自动生成一个不重复的编号,比如从0001开始如何当插入第二条记录时编号怎么才能自动生成一个0002,请各位大哥指教,高分
...全文
112 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yttrelq 2004-12-10
  • 打赏
  • 举报
回复
例子:

USE tempdb
GO
CREATE TABLE TZ (
Z_id int IDENTITY(1,1)PRIMARY KEY,
Z_name varchar(20) NOT NULL)

INSERT TZ
VALUES ('Lisa')
INSERT TZ
VALUES ('Mike')
INSERT TZ
VALUES ('Carla')

SELECT * FROM TZ

--Result set: This is how table TZ looks
Z_id Z_name
-------------
1 Lisa
2 Mike
3 Carla

CREATE TABLE TY (
Y_id int IDENTITY(100,5)PRIMARY KEY,
Y_name varchar(20) NULL)

INSERT TY (Y_name)
VALUES ('boathouse')
INSERT TY (Y_name)
VALUES ('rocks')
INSERT TY (Y_name)
VALUES ('elevator')

SELECT * FROM TY
--Result set: This is how TY looks:
Y_id Y_name
---------------
100 boathouse
105 rocks
110 elevator
TigerSuper 2004-12-10
  • 打赏
  • 举报
回复
还有一个方法就是在表中加一个自增列id,再加一个计算列
计算列 right( '0000' + cast(id as varchar(10))

为什么前面要加那么多"0"
只是做个编号的话,好象没必要
frankwong 2004-12-10
  • 打赏
  • 举报
回复
请问如何启动,identity标识 如果可以马上结贴
//建表是选定一个字段,数据类型选择bigint,标识选“是”
frankwong 2004-12-10
  • 打赏
  • 举报
回复
--这个可能更好
create trigger T on 表
for insert
as

update 表
set 编号=right( '0000' + cast(cast((select top 1 编号 from 表 order by 编号 desc) as bigint)+1 as varchar),4)
where 编号 is null or 编号='' --在插入记录时,编号没有值就是null,或者可以插入空字
fangming 2004-12-10
  • 打赏
  • 举报
回复
请问如何启动,identity标识 如果可以马上结贴
frankwong 2004-12-10
  • 打赏
  • 举报
回复
建议使用第二种方法
frankwong 2004-12-10
  • 打赏
  • 举报
回复
两种方法:
一.在插入记录前先计算当前表最后一个最大的编号,然后生成一个递增1的编号,然后连同其他字段插入到表中;
二.使用触发器,要求表不能删除记录,如表机构(编号,姓名)
create trigger T on 表
for insert
as
update 表
set 编号=right( '0000' + cast((select count(*) from 表) as varchar),4)
where 编号 is null or 编号='' --在插入记录时,编号没有值就是null,或者可以插入空字符

了缘 2004-12-10
  • 打赏
  • 举报
回复
select @no=replace(space(4-len(max(id))),'0','')+ltrim(rtrim(str(max(id)))
from table
lzymagi 2004-12-10
  • 打赏
  • 举报
回复
identity
子陌红尘 2004-12-10
  • 打赏
  • 举报
回复
对该字段启用identity标识。
zengzhengliang 2004-12-10
  • 打赏
  • 举报
回复
很简单
create table 表名 (id int identity(1,1),字段2 字段2的类型......)
最好是建表的时候用啊。。
非的不的以,不要用触发器
631799 2004-12-10
  • 打赏
  • 举报
回复
自增+计算列可以实现。
freddy2003 2004-12-10
  • 打赏
  • 举报
回复

最好还是用标识列来做(identity),然后的程序中格式化。
vinsonshen 2004-12-10
  • 打赏
  • 举报
回复
可以通过设置标识列来实现

例:
create table 表名 (id int identity(1,1),字段2 字段2的类型......)

这样建立的话,那把数据插入到该表时,id列从1开始自增,变化规律是每次增加1
注:插入此表数据时,不用插入id列
yttrelq 2004-12-10
  • 打赏
  • 举报
回复
IDENTITY([, seed increment]) [AS column_name])
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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