SQL Server - как сгенерировать уникальный порядковый номер при обновлении - PullRequest
5 голосов
/ 06 декабря 2010

У меня есть столбец в моей таблице, скажем updateStamp.Я хотел бы получить подход к обновлению этого поля новым порядковым номером при обновлении строки.

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

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

Таким образом, запрос будет выглядеть так:

SELECT * 
FROM mytable 
WHERE updateStamp > @lastReturnedUpdateStamp 
ORDER BY updateStamp

К сожалению, здесь не работают временные метки, поскольку несколько обновлений могут происходить одновременно.

1 Ответ

2 голосов
/ 06 декабря 2010

Тип данных timestamp (устарел) или rowversion (текущий) - единственный, о котором я знаю, который обновляется при каждой операции записи в строке.

Это не отметка времениper se - он не хранит дату, время в часах, секундах и т. д. - это действительно больше RowVersion (отсюда и смена имени) - уникальное, постоянно увеличивающееся число (двоичное) в строке.

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

Поскольку на самом деле это не информация о дате / времени,вам, скорее всего, понадобится еще один столбец для этой удобочитаемой информации.Вы можете добавить столбец LastModified DATETIME в свою таблицу, а с помощью ограничения DEFAULT GETDATE() вы можете вставить новое значение при вставке.Чтобы поддерживать это в актуальном состоянии, вам нужно написать триггер AFTER UPDATE, чтобы обновлять столбец LastModified при любом обновлении.

SQL Server 2011 (он же «Denali») принесет нам SEQUENCES, который идеально подошел бы для вашего случая здесь - но, увы, это «еще как минимум год от официального релиза .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...