+ -
当前位置:首页 → 问答吧 → 一个插入问题

一个插入问题

时间:2011-12-05

来源:互联网

A表 (code,varchar(20)) 
  001
  001
  001
  002
  002
  002
  ....
B表 (id int,code varchar(20))没有数据暂时为空表。并且不能设置为自增列


代码:
DECLARE @sql varchar(8000) 
DECLARE authors_cursor CURSOR FOR 
select code from A GROUP BY code
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
 set @sql='
DECLARE @ID INT
SET @ID=1
BEGIN
INSERT INTO B(ID,code)
SELECT @ID ,code FROM SYSDB..CS WHERE code='+@name+'
   
 SET @ID=@ID+1
END
 '
  print (@sql)
  exec(@sql)  
  FETCH NEXT FROM authors_cursor INTO @name
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
--------
这样查询出来以后全部是
select id,code from b 
001,1
001,1
001,1
002,1
002,1
002,1
....
我想得到的结果是
001,1
001,2
001,3
002,1
002,2
002,3
....
实际就是按code来自增id。
其实就是游标中间insert不知道怎么实现
求解

   

作者: gaoxiaobo   发布时间: 2011-12-05

SQL code
你这个完全可以不用游标啊

select id,code=row_number()over(partition by id order by getdate()),* from b 


就可以了

作者: fredrickhu   发布时间: 2011-12-05

row_number

作者: XIAOXIAO_MUYU   发布时间: 2011-12-05

引用 1 楼 fredrickhu 的回复:
SQL code
你这个完全可以不用游标啊

select id,code=row_number()over(partition by id order by getdate()),* from b


就可以了



sql 2000有这个函数吗?麻烦贴出插入代码

作者: gaoxiaobo   发布时间: 2011-12-05