Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Изменить большое количество значений в поле datetime  [new]
aux3
Member

Откуда:
Сообщений: 316
Добрый день!

Подскажите, как можно максимально быстро изменить (добавить несколько лет)
к полю datetime в таблице максимально быстро.
Менять нужно значения во всех строках в таблице
19 мар 12, 09:16    [12271443]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
aux3,
если есть, убрать индексы по полю с датой и
update table set f_date = dateadd( yaer,f_date,2)
19 мар 12, 09:27    [12271481]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
aux3
Member

Откуда:
Сообщений: 316
А можно это сделать не одной большой транзакцией а порциями по 100000 записей чтобы избежать роста журнала?
21 мар 12, 10:27    [12285901]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Можно, если вы знаете как отличить обработанные порции от необработанных. А как именно делать, зависит от модели восстановления БД.
21 мар 12, 10:36    [12285975]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
aux3
Member

Откуда:
Сообщений: 316
а есть смысл добавить например дополнительное поле для слестеризованной таблицы размером 700ГБ и по нему отличать записи?
21 мар 12, 10:47    [12286076]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
aux3
а есть смысл добавить например дополнительное поле для слестеризованной таблицы размером 700ГБ и по нему отличать записи?
смысла нет. ключа у таблицы нет что ли?
21 мар 12, 10:52    [12286102]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
если все же первичный ключ есть, то можно сделать по принципу
+

set nocount on ;
declare @table table
  (
    id int identity
  , f_date datetime
  )
declare @maxId int= 0 ;
declare @qty int = 10 ;
declare @t table
  (
    id int
  , primary key ( id )
  )

declare @i int= 0
while @i < 100 
  begin
    insert  into @table
            ( f_date )
    values  ( getdate() - @i )
    set @i = @i + 1 ;
  end ;


while 1 = 1 
  begin 
    update  t
    set     f_date = dateadd(year, 2, f_date)
    output  inserted.id
            into @t
    from    @table t
    where   t.id in ( select top ( @qty )
                              id
                      from    @table z
                      where   z.id > @maxId
                      order by id )
    if @@rowcount < @qty 
      break ;
    select  @maxId = max(id)
    from    @t ;
    select  @maxId ;
    delete  @t ;
  end

21 мар 12, 11:13    [12286265]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
aux3
Member

Откуда:
Сообщений: 316
База 1С - там нет "нормального" ключа.

Задача состоит в увеличении дат на 2000 к существующей дате
21 мар 12, 11:19    [12286303]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
aux3
База 1С - там нет "нормального" ключа.

какой же ключ по Вашему нормальный? если не изменяет память, всё там есть...
21 мар 12, 11:47    [12286583]     Ответить | Цитировать Сообщить модератору
 Re: Изменить большое количество значений в поле datetime  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Я не знаток 1С,а есть уверенность,что после +2000 1С продолжит корректно работать?
Там по-моему, где-то выставляется надо ли делать +2000 или оставить по-человечески.
Да и ключи там представлены GUID'ом.
21 мар 12, 12:00    [12286684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить