记快速给一个表加上自增长列

由于公司要给老系统升级,原来的表没有自增长列,然后昨天同事吧表复制了同样表结构,再导入到我们新数据库,结果就是新数据库没有ID列,这个时候就存在了问题,因为我们新写的都是根据ID来的,没有ID就会存在问题,然后就寻思怎么给它加上ID。

版本1:

begin
DECLARE @NUM1 INT
SELECT @NUM1 = MAX(DYID) FROM YW_DMDY
while ((select count(1) from YW_DMDY where (DYID='' or DYID is null)) > 0)
begin
SET @NUM1 = @NUM1 + 1
update YW_DMDY set DYID=@NUM1 where EJJGM=(select top 1 EJJGM from YW_DMDY where (DYID='' or DYID is null))
end
end

PS:这个方法很笨,虽然能实现,但是表有600W+的数据,每次只更新一条还做一次查询,做完就要查询600W次,所以,四个小时只更新了29万条。GG!

版本2:

begin
DECLARE @NUM1 INT
DECLARE @Count1 INT
SELECT @NUM1 = MAX(DYID) FROM YW_DMDY
SELECT @Count1 = COUNT(1) FROM YW_DMDY where (DYID='' or DYID is null)
SET @Count1=@Count1+@NUM1
create table #id
(
id int
)
while (@NUM1 <= @Count1)
begin
SET @NUM1 = @NUM1 + 1
insert into #id values(@NUM1)
end
select '开始更新'
update YW_DMDY set YW_DMDY.DYID=#id.id from YW_DMDY,#id where (DYID='' or DYID is null)
drop table #id
end

PS:这次使用了临时表,但是是从网上看的更新字段方法,可能是数据库之间不同,更新只取了临时表的第一条全部更新到表中,而且花了40分钟。GG!

版本3:

 先:create view a
as
select ROW_NUMBER() OVER(order by EJJGM) as rid, DYID from [dbo].[YW_DMDY]
然后执行:
update a set DYID=rid;
大功告成!
posted @ 2017-03-07 16:27  自强不息的sun  阅读(189)  评论(2)    收藏  举报