怎样自动插入一个序列号(非自增量类型)?
需要对一组数据进行自然排序编号,从页面上得到一组数据如下:
jacky,jiang,chen
我想把这组数据插入数据库,并自动分配一个序号,按照顺序,例如1 jacky,2 jiang,3 chen,这个序号插入另外一个字段中,但我不想要自增量的那种字段,因为自增量的数值将会越来越大,数值太大不适合显示在前台,我需要每次获得的一组数据都是从1开始排序,怎么办?
[解决办法]
使用存储过程是一个方法,参考:
--创建测试表
if OBJECT_ID('tb')>0 drop table tb
go
select top 0 1 id,cast('name' as varchar(50)) as name into tb
GO
--创建过程
if OBJECT_ID('p_InsStr','p')>0 drop proc p_InsStr
go
create proc p_InsStr
@insertStr varchar(1000)
as
--没有过滤防攻击代码,需要的话自己参考相关资料加入
set nocount on
set @insertStr=LTRIM(RTRIM(@insertStr))
if left(@insertStr,1)=',' set @insertStr=stuff(@insertStr,1,1,'')
if RIGHT(@insertStr,1)<>',' set @insertStr=@insertStr+','
declare @i int
set @i=0
while LEN(@insertStr)>0
begin
set @i=@i+1
insert tb select @i,LEFT(@insertStr,CHARINDEX(',',@insertStr)-1)
set @insertStr=STUFF(@insertStr,1,CHARINDEX(',',@insertStr),'')
end
GO
--测试结果
exec p_InsStr 'a,b,c'
exec p_InsStr ',d,e,tony,'
select * from tb
/*
id name
----------- --------------------------------------------------
1 a
2 b
3 c
1 d
2 e
3 tony
(6 行受影响)
*/
DECLARE @Str VARCHAR(100)
SET @Str='jacky,jiang,chen'
SELECT order_number=Row_Number() Over(ORDER BY b.Number),[name]=SUBSTRING(a.strArr,b.Number,CHARINDEX(',',a.StrArr+',',b.Number)-b.Number)
FROM
(
select Number=1,StrArr=@Str
) a
Join master.dbo.spt_values b
ON b.Number<=len(a.StrArr)
WHERE SUBSTRING(','+a.StrArr,b.Number,1)=',' AND b.TYPE='P'
/*
order_numbername
-----------------------------
1jacky
2jiang
3chen
(3 行受影响)
*/