表A有一个记录号字段,记录号字段使用事务控制唯一性
生成唯一记录号过程如下:
BEGIN TRANSACTION
declare @maxid int
set @maxid=0
select *from A
if @@rowcount>0
begin
declare @max varchar(50)
select @max=max(记录号) from A
select @maxid=right(@max,9)
end
...
set @ID=@ID+convert(varchar(20),@maxid)
insert into A(记录号) values(@ID)
COMMIT当A中数据很庞大时(如20W条记录),生成一条记录,sqlservr CPU占用率很高(不能满足实际需求),其中表A中的数据也不能随便删除,请问该如何解决?
生成唯一记录号过程如下:
BEGIN TRANSACTION
declare @maxid int
set @maxid=0
select *from A
if @@rowcount>0
begin
declare @max varchar(50)
select @max=max(记录号) from A
select @maxid=right(@max,9)
end
...
set @ID=@ID+convert(varchar(20),@maxid)
insert into A(记录号) values(@ID)
COMMIT当A中数据很庞大时(如20W条记录),生成一条记录,sqlservr CPU占用率很高(不能满足实际需求),其中表A中的数据也不能随便删除,请问该如何解决?
select top 1 * from A with (tablock) order by ...
BEGIN TRANSACTION
declare @maxid int
set @maxid=0
select * from A
if @@rowcount>0
begin
--declare @max varchar(50)
select top 1 @maxid=right(记录号,9) from A order by 记录号 desc
--select =right(@max,9)
end
...
set @ID=@ID+convert(varchar(20),@maxid)
insert into A(记录号) values(@ID)
COMMIT
--没经验的改了一下,不晓得会不会好点
这句话有问题。如果A表数据量大,那么就影响效率要替换掉,用exits等都可以。
如
00001
00002
...
00100