高手,请进!存储过程

fastrain 2009-06-01 03:36:20
求一个存储过程:
现有学生表eduClassStud(eduClass_ID,Stud_No),其中,Stud_No现在都是空的,我现在想给每一个班级的Stud_No赋值,每一个班级Stud_No从1开始,顺序递增,Stud_NO为smallint类型 。
我补充补充,数据已经存在数据库中,Stud_No是新加的字段。
我想存储过程的功能是给一个参数eduClass_ID,然后就给这个eduClass_ID下的每一个数据Stud_NO赋值,从1开始,顺序递增。eduClass_ID,Stud_No 都不是表主键
...全文
107 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
csdyyr 2009-06-02

CREATE TABLE [eduClassStud](
[Line_ID] [VarChar](10) NOT NULL,
[eduClass_ID] [VarChar](10) NULL,
[Stud_NO] [smallint] NULL,

)

insert into eduClassStud values('SXYQMY0001','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0002','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0003','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0004','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0005','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0006','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0007','QWERTY1000',null)
insert into eduClassStud values('SXYQMY0008','QWERTY1000',null)


insert into eduClassStud values('SXYQMY0009','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0010','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0011','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0012','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0013','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0014','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0015','QWERTY1001',null)
insert into eduClassStud values('SXYQMY0016','QWERTY1001',null)


insert into eduClassStud values('SXYQMY0017','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0018','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0019','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0020','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0021','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0022','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0023','QWERTY1002',null)
insert into eduClassStud values('SXYQMY0024','QWERTY1002',null)

UPDATE [eduClassStud]
SET Stud_NO=SEQ
FROM [eduClassStud] AS A JOIN (
SELECT [Line_ID],SEQ=(SELECT COUNT(*) FROM [eduClassStud] WHERE [eduClass_ID]=T.[eduClass_ID] AND [Line_ID]<=T.[Line_ID])
FROM [eduClassStud] AS T
) B
ON A.[Line_ID]=B.[Line_ID]

SELECT * FROM [eduClassStud]

DROP TABLE [eduClassStud]
/*
Line_ID eduClass_ID Stud_NO
---------- ----------- -------
SXYQMY0001 QWERTY1000 1
SXYQMY0002 QWERTY1000 2
SXYQMY0003 QWERTY1000 3
SXYQMY0004 QWERTY1000 4
SXYQMY0005 QWERTY1000 5
SXYQMY0006 QWERTY1000 6
SXYQMY0007 QWERTY1000 7
SXYQMY0008 QWERTY1000 8
SXYQMY0009 QWERTY1001 1
SXYQMY0010 QWERTY1001 2
SXYQMY0011 QWERTY1001 3
SXYQMY0012 QWERTY1001 4
SXYQMY0013 QWERTY1001 5
SXYQMY0014 QWERTY1001 6
SXYQMY0015 QWERTY1001 7
SXYQMY0016 QWERTY1001 8
SXYQMY0017 QWERTY1002 1
SXYQMY0018 QWERTY1002 2
SXYQMY0019 QWERTY1002 3
SXYQMY0020 QWERTY1002 4
SXYQMY0021 QWERTY1002 5
SXYQMY0022 QWERTY1002 6
SXYQMY0023 QWERTY1002 7
SXYQMY0024 QWERTY1002 8

(24 row(s) affected)
*/
回复
fastrain 2009-06-02
高手,高手
回复
fastrain 2009-06-02
[Quote=引用 13 楼 fcuandy 的回复:]
方法无非是这几种
1,变量递增update
2,count计数
3,05/08的排名函数
4,临时表+identity列

不知道你倒底想要什么?
[/Quote]

我想要的结果就是在一个班级内,将序号从1开始赋值。
具体的方法我也不清楚,是在2000下要用的
回复
fcuandy 2009-06-01
方法无非是这几种
1,变量递增update
2,count计数
3,05/08的排名函数
4,临时表+identity列

不知道你倒底想要什么?
回复
fastrain 2009-06-01
高手,还有其它方法没有
回复
等不到来世 2009-06-01
[Quote=引用 7 楼 fastrain 的回复:]
引用 5 楼 szx1999 的回复:
一句话可以全部更新完:

SQL codeupdate t
set Stud_No=num
from (select eduClass_ID,Stud_No,num=row_number() over(partition by eduClass_ID order by getdate()) from eduClassStud) t


这个在SQL2000下面不能通过,没有这个函数row_number() 。
有变通的没有
[/Quote]
参考3楼钻大牛的方法
回复
fastrain 2009-06-01
但是用户那里的数据库是2000,又不能迁移数据库
回复
moonshineidolon 2009-06-01
用sql2005
回复
fastrain 2009-06-01
[Quote=引用 6 楼 ChinaJiaBing 的回复:]
求一个存储过程:
现有学生表eduClassStud(eduClass_ID,Stud_No),其中,Stud_No现在都是空的,我现在想给每一个班级的Stud_No赋值,每一个班级Stud_No从1开始,顺序递增,Stud_NO为smallint类型 。
我补充补充,数据已经存在数据库中,Stud_No是新加的字段。
我想存储过程的功能是给一个参数eduClass_ID,然后就给这个eduClass_ID下的每一个数据Stud_NO赋值,从1开始,顺序递增。eduClass_ID,Stud_No 都不是表主键

SQL c…
[/Quote]

这里有很多班级,每一个班级从1开始编号。
回复
fastrain 2009-06-01
[Quote=引用 5 楼 szx1999 的回复:]
一句话可以全部更新完:

SQL codeupdate t
set Stud_No=num
from (select eduClass_ID,Stud_No,num=row_number() over(partition by eduClass_ID order by getdate()) from eduClassStud) t
[/Quote]

这个在SQL2000下面不能通过,没有这个函数row_number() 。
有变通的没有
回复
ChinaJiaBing 2009-06-01
求一个存储过程:
现有学生表eduClassStud(eduClass_ID,Stud_No),其中,Stud_No现在都是空的,我现在想给每一个班级的Stud_No赋值,每一个班级Stud_No从1开始,顺序递增,Stud_NO为smallint类型 。
我补充补充,数据已经存在数据库中,Stud_No是新加的字段。
我想存储过程的功能是给一个参数eduClass_ID,然后就给这个eduClass_ID下的每一个数据Stud_NO赋值,从1开始,顺序递增。eduClass_ID,Stud_No 都不是表主键

declare @var int
set @var=1
update t set Stud_No= @var,@var=@var+1
回复
等不到来世 2009-06-01
一句话可以全部更新完:
update t
set Stud_No=num
from (select eduClass_ID,Stud_No,num=row_number() over(partition by eduClass_ID order by getdate()) from eduClassStud) t
回复
sdhdy 2009-06-01
--try:
declare @eduClass_ID int,@Stud_No smallint
select @eduClass_ID=班级id,@Stud_No=0
update eduClassStud set @Stud_No=@Stud_No+1,Stud_No=@Stud_No
where eduClass_ID=@eduClass_ID
回复
子陌红尘 2009-06-01
declare @eduClassStud table(eduClass_ID int,Stud_No int)
insert into @eduClassStud select 1001,null
union all select 1001,null
union all select 1002,null
union all select 1002,null
union all select 1001,null
union all select 1003,null
union all select 1001,null
union all select 1004,null
union all select 1004,null
union all select 1003,null
union all select 1003,null
union all select 1001,null
union all select 1002,null
union all select 1004,null

declare @i int

update t set @i=isnull(@i,0)+1,Stud_No=@i from @eduClassStud t
update t set t.Stud_No=(select count(1) from @eduClassStud where t.eduClass_ID=eduClass_ID and Stud_No<=t.Stud_No) from @eduClassStud t

select * from @eduClassStud
/*
eduClass_ID Stud_No
----------- -----------
1001 1
1001 2
1002 1
1002 2
1001 3
1003 1
1001 4
1004 1
1004 2
1003 2
1003 3
1001 5
1002 3
1004 3
*/
回复
fastrain 2009-06-01
还有其他的没有,继续啊,高手
回复
子陌红尘 2009-06-01
try:
declare @i int
update eduClassStud set @i=@i+1,Stud_No=@i
update eduClassStud set Stud_No=(select count(1) from eduClassStud t where t.eduClass_ID=eduClass_ID and t.Stud_No<=Stud_No)
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2009-06-01 03:36
社区公告
暂无公告