████████【SQL Server语句求救】用sql语句实现字段值自增1!██████

csdn8008 2003-10-23 03:07:08
怎样用sql语句实现字段值自增1?
如:
“标识”为递增一的主键,现在需要一个递增一的号码字段。
要求新纪录的号码为现有的最大号码加一。
max(号码)+1

请问如何实现?
...全文
308 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
nichen 2003-10-24
  • 打赏
  • 举报
回复
楼主糊涂!
int xn=1;
while(OLread.Read())
{
int maxnum=OLread.GetInt32(0)+1;
xn=maxnum;
}
不就可以了?哈,低级错误哦。

liuyu12 2003-10-23
  • 打赏
  • 举报
回复
建立数据库的时候字段设置为autoincreatment就行了?
在哪里设昵?不好意思是一个小的问题
goodluck001 2003-10-23
  • 打赏
  • 举报
回复
If there is a table like this:

Tab1
-----------------------------
ID int
Name varchar(50)
-----------------------------



Then the procedure of inserting data:
-----------------------------------------
CREATE PROCEDURE proc_insert @name varchar(50)
as

declare @id int
select @id=isnull(max(ID),0)+1 from Tab1

insert Tab1(ID,Name) values(@id,@name)


-------------------------------------------
OK, Just Done !

csdn8008 2003-10-23
  • 打赏
  • 举报
回复
一个低级的问题,不好意思:
OLconn.Open();
string cmdtxt1="SELECT MAX(号码) FROM 用户信息";
SqlCommand OLcmd1=new SqlCommand(cmdtxt1,OLconn);
SqlDataReader OLread;
OLread1=OLcmd1.ExecuteReader();
while(OLread.Read())
{
int maxnum=OLread.GetInt32(0)+1;
}
OLread1.Close();

这样取成功的得了maxnum+1,但是怎样在while循环外面用 maxnum 的值?
因为要用maxnum+1作为新用户的识别号码字段的值,构造新增用户的SQL语句
INSERT INTO 用户信息(号码,昵称) VALUES (maxnum,'QQ')
上面这样直接引用不行,maxnum属于while循环。
orcale 2003-10-23
  • 打赏
  • 举报
回复
思路可以放寬點用程序也可完成
你只要抓max(i)然後再+1就可以了

podded 2003-10-23
  • 打赏
  • 举报
回复
oracle的序列和触发器可以很好的实现这个功能。
csdn8008 2003-10-23
  • 打赏
  • 举报
回复
数据库中已经有一个自增字段“标识”了,
Sql Server不能同时有两个自增字段的。

而如果实际要求要实现两个自增字段呢?
csdn8008 2003-10-23
  • 打赏
  • 举报
回复
OLconn.Open();
string cmdtxt1="SELECT MAX(号码) FROM 用户信息";
SqlCommand OLcmd1=new SqlCommand(cmdtxt1,OLconn);
SqlDataReader OLread;
OLread1=OLcmd1.ExecuteReader();
while(OLread.Read())
{
int maxnum=OLread.GetInt32(0)+1;
}
OLread1.Close();

然后再用maxnum作为插入纪录的号码的值。
INSERT INTO 用户信息(号码,昵称) VALUES (maxnum,'突突')

不知是否可行?
billqi 2003-10-23
  • 打赏
  • 举报
回复
IDENTITY(int, 1,1) 为sql自增函数,自增种子为1,自增量为1,这个函数须只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。
你可以把你的实现写在stored procedure or your sql script.
billqi 2003-10-23
  • 打赏
  • 举报
回复
这样就可以实现你要的效果了吧?
select questiontypeid,testNum,IDENTITY(int, 1,1) AS id1 into #temp from papersetting
select * from #temp
drop table #temp
chenxy2002 2003-10-23
  • 打赏
  • 举报
回复
为什么不用自增的字段呢?很好用呀。不过ORACLE的SEQUENCE就很难用了。
lbywyj 2003-10-23
  • 打赏
  • 举报
回复
declare @max_id int
declare @count int
select @max_id = max(id)from users
select @count= count(*)from users
if (@count=0)
@max_id=1
else
@max_id= @max_id+1

BeastTL 2003-10-23
  • 打赏
  • 举报
回复
=============================================
CREATE PROCEDURE dbo.InsertUser
@sName varchar(50),
@sPassWord varchar(20),
@Count int
AS
select @Count=Max(Id) from Users
begin
insert into Member (Id,Name,PassWord)
values
(@Count+1,@sName,@sPassWord)
end
GO
===============================================
这个显然是有问题的。如果有一些数据以后删除一条非末尾记录,然后再添加就会出现重复ID

应该Select Max(Id)+1作为ID )
kuangren 2003-10-23
  • 打赏
  • 举报
回复
你在建立数据库的时候字段设置为autoincreatment就ok了
这个是最简单的解决方法
当然也可参考上面的
yaotiebing 2003-10-23
  • 打赏
  • 举报
回复
除非你的数据库是ORACLE 否则建议使用 自增长ID 自段 不用你控制 她自己会自动增长的!!
如果自己写就麻烦了 你要考虑到并发操作 还有删除以后是否会出现相同的ID
ddy2000 2003-10-23
  • 打赏
  • 举报
回复

CREATE PROCEDURE dbo.InsertUser
@sName varchar(50),
@sPassWord varchar(20),
@Count int
AS
select @Count=Max(Id) from Users
begin
insert into Member (Id,Name,PassWord)
values
(@Count+1,@sName,@sPassWord)
end
GO

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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