Подтвердить что ты не робот

SQL Server, обновляющий столбец временной отметки

В моей базе данных есть столбец timestamp. Мне нужно обновить строку в таблице и обновить столбец timestamp. Когда я запускаю команду обновления, я получаю:

Cannot update a timestamp column.

Как обновить столбец timestamp?

4b9b3361

Ответ 1

Вы не

Столбец timestamp автоматически обновляется. Возможно, у вас создается впечатление, что временная метка содержит значение, относящееся к времени? Это не так, но просто это число, которое обновляется всякий раз, когда значение в этой записи. Подумайте, как номер версии строки.

Из MSDN:

Тип данных временной метки - это просто увеличивая число и не сохранить дату или время.

Ответ 2

Вы не обновляете столбец timestamp - временную метку (теперь переименованную rowversion), колонка автоматически обновляется SQL-сервером всякий раз, когда любой другой столбец в строка обновляется.


Если вы уже это знали, но по какой-то причине хотите, чтобы столбец обновлялся, просто выполните обновление против строки, которую вы хотите затронуть. Даже если это не приведет к фактическому изменению данных, столбец временной отметки будет обновляться:

create table #T1 (
    ID int not null,
    ts timestamp not null
)
insert into #T1 (ID)
select 1 union all
select 2
select * from #T1
update #T1 set ID = ID where ID=1
select * from #T1

ID  ts
1    0x0000000000039AAF
2    0x0000000000039AB0

ID  ts
1    0x0000000000039AB1
2    0x0000000000039AB0

Ответ 3

Хотя мой вопрос не является ответом на ваш вопрос, я хотел бы упомянуть, как TIMESTAMP можно понять неправильно.

Вы не укажете, как использовать столбец TIMESTAMP в своем вопросе, но факт, который вы пытаетесь обновить, подразумевает (для меня), который вы пытаетесь записать, когда ваши данные изменяются.

Посмотрите эту статью (в сети также есть много других) относительно использования TIMESTAMP, когда вы действительно хотите записать измените с помощью DATETIME.

BOL говорит:

Тип данных временной метки SQL Server не имеет ничего общего со временем или датами. Временные метки SQL Server являются двоичными числа, указывающие относительную последовательность изменений данных состоялось в базе данных. тип данных временной метки был изначально реализована для поддержки SQL Server алгоритмов восстановления.

Как говорит Damien_The_Unbeliever, тип был переименован, и в описании говорится:

Тип данных rowversion - это просто увеличивая число и не сохранить дату или время. Чтобы записать дату или время, используйте данные datetime2 тип.

Конечно, если вы используете тип данных таким образом, чтобы игнорировать все вышесказанное:)

Ответ 4

Столбец timestamp

не может быть обновлен, так как он сгенерирован сервером и гарантирован быть уникальным для всей базы данных - если были разрешены обновления, а это не так, то значение не гарантируется как уникальное.

i столкнулась с такой же проблемой, пытаясь обновить столбец timestamp в реплицированном экземпляре, потому что реплицированный экземпляр не имел того же значения времени, что и издатель, что вызвало некоторые проблемы при попытке получить последнюю обновленную запись на группу записей. конечно, с репликацией, это была простая конфигурацияg в издателе, чтобы включить то же значение метки времени для репликации подписчика.

В противном случае нет другого способа обновить значение метки времени.