每次提交5000行

时间:2013-09-10 19:22:36

标签: sql-update sybase-ase

在我的时区很好。

我想更新一个表,使用的RDBMS是Sybase ASE 15。 因为该表包含近100万行,我必须在生产中运行此更新 环境,我想更新并提交每10000行。我没有Sysbase的经验。 任何人都可以帮助我,如果可能的话,可以提供一些代码示例

提前致谢 最诚挚的问候

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

 -- 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没有UniquePK列,则可以添加identity列,如下所示

alter table tab
add id numeric(10,0) identity

比你可以运行上面的解决方案。

答案 1 :(得分:0)

如果无法在生产中添加标识列并且您有一个包含日期的列,则还可以使用日期作为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