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

Откуда:
Сообщений: 73
Как работает поле TimeStamp.
Микрософт пишет что благодаря использованию этого поля в таблицах Сервер быстрее отслеживает изменения. Так это или нет и как это использовать!
20 май 03, 17:41    [204307]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
avkv
Member

Откуда:
Сообщений: 73
Я так понял на TimeStamp все положили ? Че совсем никто ни пользуется?
20 май 03, 18:02    [204340]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
Glory
Member

Откуда:
Сообщений: 104760
Хорошо бы приводить огигинальную цитату, а то совершенно не понятно что есть "быстрее отслеживать изменения".
Возможно имеется ввиду то, что т.к. это поле изменяется автоматически, то для проверки этого факта на клиенте достаточно сравнить значение TimeStamp поля на сервере и у пользователя ?
20 май 03, 18:07    [204352]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Одно из возможных направлений использования поля Timestamp это реализация оптимистических блокировок. Когда это поле включается в условие отбора для запросов на сохранение изменений. И тогда если ни одна запись не была обработана, значит ее кто-то уже поменял.
20 май 03, 18:14    [204362]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
Flint-San
Member

Откуда: Magnitogorsk
Сообщений: 146
Очень удобно использовать это поле для отслеживания изменений в таблице
за любой период времени(час,день, неделя, год и тд). Избавление от избыточного сканирования в ряде других случаев(когда невозможно или неприемлимо использование тригерра). Вполне применимо для замены Snapshot репликаций; почему бы не взять контроль передачи данных в свои руки?
Как реализовать.
Например для репликаций:
Ввести таблицу на приемнике в которой будет хранится
1. имена таблиц
2. последний timestamp

DECLARE @LastValue_ACHoper varbinary(8),
@newValue_ACHoper varbinary(8)

SELECT @LastValue_ACHoper=TimeStmp FROM ACStoreTimeStmp WHERE UPPER (NameTable)='ACHOPER'

SELECT @newValue_ACHoper=max(TimeStmp) FROM ACHoper

--вставка или изменения записей в другой table
..........
FROM ServerRPC.MyDb..ACHoper AS H1
.................
WHERE
H1.TimeStmp > @LastValue_ACHoper -- выбрать все последние изменения
AND H1.TimeStmp <= @newValue_ACHoper

if @@ROWCOUNT > 0
BEGIN
UPDATE ACStoreTimeStmp
SET TimeStmp = @newValue_ACHoper
WHERE UPPER (NameTable)='ACHOPER'
END

Но есть одна проблемма, например если не надо ничего реплицировать,
а необходимо проделать изменения в каких-то полях той же таблицы и нет возможности добавить этот БОЛЬШОЙ код в тригер (здесь я ограничился одним Update и одним timestamp одной таблицы), так как в тригере уже и так достаточно кода. Отсюда работает job с вызвом SP в которой примерно такой код:

DECLARE @LastValue_ACHoper varbinary(8)

SELECT @LastValue_ACHoper=TimeStmp FROM ACStoreTimeStmp
WHERE UPPER ( NameTable)='ACHOPER'

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE --в этом то и проблемма
BEGIN TRAN --все update на локальном сервере

UPDATE H1
SET ....................
FROM ACHoper AS H1
WHERE
H1.TimeStmp > @LastValue_ACHoper -- выбрать все последние изменения
--как видно нельзя использовать диапозон до, так как это приведет
--к бесконечному циклу обнавления записей

--и только после Update сохраняем потолок(конечный диапазон)
UPDATE ACStoreTimeStmp
SET TimeStmp=ISNULL( (SELECT MAX(H.TimeStmp) FROM ACHoper H), 0x0000000000000000)
WHERE UPPER(NameTable)='ACHOPER'

COMMIT TRAN
21 май 03, 09:48    [204682]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
Flint-San
Member

Откуда: Magnitogorsk
Сообщений: 146
Поправка
вместо
SELECT @newValue_ACHoper=max(TimeStmp) FROM ACHoper
должно быть
SELECT @newValue_ACHoper=max(TimeStmp) FROM ServerRPC.MyDb..ACHoper
21 май 03, 09:50    [204693]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
avkv
Member

Откуда:
Сообщений: 73
Спасибо Flint-San вполне понятно и то что я хотел узнать!!!
21 май 03, 12:12    [205002]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: TimeStamp  [new]
PL1
Member

Откуда:
Сообщений: 1
Скажите, а нельзя ли получить последнее значение timestamp не используя функцию MAX? Ведь MAX на больших таблицах будет очень долго работать?
Для получения последнего IDENTITY, например, есть специальные функции, а для timestamp нет?
16 мар 05, 18:36    [1392124]     Ответить | Цитировать Сообщить модератору
 Re: TimeStamp  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
PL1
Скажите, а нельзя ли получить последнее значение timestamp не используя функцию MAX? Ведь MAX на больших таблицах будет очень долго работать?
Для получения последнего IDENTITY, например, есть специальные функции, а для timestamp нет?
От чего же долго? Индекс на эту колонку и делов то.
Если в базе только одна табличка с timestamp, то последнее значение (и вообще - последнее значение на уровне базы) можно получит с помощью ф-ии @@DBTS
SELECT @@DBTS
17 мар 05, 07:05    [1392684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить