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

Откуда:
Сообщений: 26
Гуру, подскажите.

Пишу грязный запрос

select * from table (nolock)
where TransDate < @parmDate

можно как-то понять - попали в выборку грязные данные или только чистые?
2 мар 12, 16:29    [12184796]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
mir_on_off,

нет
2 мар 12, 16:30    [12184802]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
Crimean
Member

Откуда:
Сообщений: 13147
есть извращенный способ

select a.*, b.pk from mytable a with (nolock) left join mytable b with (readpast) on b.pk = a.pk

для "грязных" данных будет b.pk is null
2 мар 12, 16:46    [12184972]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
mir_on_off
Member

Откуда:
Сообщений: 26
Ну хорошо, а выбрать ТОЛЬКО грязные данные? Т.е. что-то типа select (ONLYlock) ?
2 мар 12, 17:03    [12185157]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
mir_on_off
Ну хорошо, а выбрать ТОЛЬКО грязные данные? Т.е. что-то типа select (ONLYlock) ?

А для чего Вам простите это надо?
Если вы с помощью nolock уходите от блокировок и вам надо актуалные данные на момент начала вашей транзакции, то можете использовать Snapshot isolation level. Правла дополнительные нагрузки на tempdb и увеличение зармера строки на 14 байт для версионности.
2 мар 12, 17:08    [12185192]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
mir_on_off
Member

Откуда:
Сообщений: 26
Суть вот в чем: Делаю периодический импорт данных из таблицы, опираюсь на дату модификации записи, т.е. после импорта запоминаю max(modifiedDateTime), следующий импорт - с этой точки.

т.е. типа
select * from table
where modifiedDateTime >= @lastModifiedDateTime (точка пред. импорта)


Проблема - я читаю чистые данные, полкучаю 100 записей, запоминаю max(modifiedDateTime) как новую точку актуальности, а в это время завершается какая-то транзакция и кладет в этот же диапазон еще 10-ток записей..
2 мар 12, 17:33    [12185337]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
Crimean
Member

Откуда:
Сообщений: 13147
mir_on_off,

1. работать по timestamp
2. не забывать про min_active_rowversion

остальное есть в БОЛ
2 мар 12, 17:40    [12185371]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
SergePnb
Member

Откуда: Киев
Сообщений: 456
mir_on_off
Суть вот в чем: Делаю периодический импорт данных из таблицы, опираюсь на дату модификации записи..


Может вам присмотреться к Система отслеживания измененных данных
Сам не применял ни разу, но пишут красиво :)

MSDN
Система отслеживания измененных данных предоставляет сведения о DML-изменениях в таблице или базе данных. Используя систему отслеживания измененных данных, можно устранить такие дорогостоящие методики, как пользовательские триггеры, столбцы временных меток и запросы на соединение.
2 мар 12, 17:49    [12185428]     Ответить | Цитировать Сообщить модератору
 Re: Отделить чистые и грязные данные  [new]
mir_on_off
Member

Откуда:
Сообщений: 26
Красиво кстати :) Только Enterprise версия не дешевая, а так спасибо, не знал.
2 мар 12, 18:33    [12185689]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить