在我的时区下午好。
我想更新一个表,使用的 RDBMS 是 Sybase ASE 15。因为该表包含近 100 万行,我必须在生产环境中运行此更新,我想每 10000 行更新和提交一次。我不有 Sysbase 方面的经验。任何人都可以帮助我,如果可能的话放一些代码示例
提前致谢 最好的问候
在我的时区下午好。
我想更新一个表,使用的 RDBMS 是 Sybase ASE 15。因为该表包含近 100 万行,我必须在生产环境中运行此更新,我想每 10000 行更新和提交一次。我不有 Sysbase 方面的经验。任何人都可以帮助我,如果可能的话放一些代码示例
提前致谢 最好的问候
尝试这样的事情:
-- declaration
declare @counter int,
@MaxId int,
@Rows int
select @counter=0 -- start position
select @Rows=10000 -- how many rows do you want to update in one time
select @MaxId = count(*)
from tab
-- updating in loop
while @counter<@MaxId+@Rows
begin
update tab
set col1 = 'val'
where id between @counter and @counter+@Rows-1
select @counter=@counter+@Rows
end
go
编辑:
如果表tab
没有Unique
或PK
列,则可以添加identity
如下列
alter table tab
add id numeric(10,0) identity
比你可以运行上面的解决方案。
如果无法在生产中添加标识列并且您有一个包含日期的列,您还可以使用日期作为 ID 来更新某些时间段:
SELECT @slicedStartDate = @startDate
SELECT @slicedEndDate = @startDate
WHILE (@slicedEndDate < @endDate)
BEGIN
SELECT @slicedEndDate = dateAdd(hh, @timeSlice, @slicedStartDate)
UPDATE xxxx WHERE date_column >= @slicedStartDate AND date_column < @slicedEndDate
SELECT @slicedStartDate = @slicedEndDate
END