1

在我的时区下午好。

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

提前致谢 最好的问候

4

2 回答 2

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

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

于 2013-09-10T21:27:22.507 回答
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
于 2013-09-11T13:13:10.710 回答