Предположим, что у меня есть таблица из 100 строк, я просто хочу выбрать 10 лучших строк таблицы, но моя ситуация в том, что я хочу выбрать только те строки, которые ранее не обрабатывались. Для этого я добавил столбец «Флаг», чтобы я обновлял всякий раз, когда обрабатываю строки.Не повторяется Чтение из таблицы базы данных в SQL Server
Но здесь проблема возникает, когда параллельный запрос поступает на верхние 10 строк. Оба могут получать одинаковые строки и пытаться обновить одни и те же строки (чего я не хочу делать).
Здесь я не могу использовать Begin Transaction, потому что он заблокирует таблицу, а параллельный запрос не будет обработан.
Требования: Мое фактическое требование Когда я выбор топ 10 строк используя условие флага и обновление затем, а затем, если другой запрос для же он будет также выбрать другие верхние 10 строк, не орудуя Запроса 1.
Example : My table contains 100 rows.
{
Select top 10 * from table_name where flag=0
update table_name set top 10 flag = 1
}
(Will select top 10 out of 100 rows n update)
if at the same time during above request, another request come,
{
Select top 10 * from table_name where flag=0 (Should skip previous request rows)
update table_name set top 10 flag = 1
}
Need: (Will select top 10 out of rest 90 rows n update)
I Need замок на вершине 10 строк первого запроса, но замок хотел пропустить строки первого запроса, даже при одновременном отборного заявления обоих запросов
Пожалуйста, помогите мне решить эту проблему.
Thanx Ameya для того, чтобы перефразировать вопрос. Не могли бы вы мне помочь? –
1. Одновременная фантазия нашего воображения. 2.Что вам действительно нужно? нормально ли, если первый запрос блокирует всю таблицу в течение очень короткого периода времени (миллисекунды или менее), и что следующий запрос будет ждать завершения этой части, прежде чем выбрать собственную группу из 10 строк? – Amit
@Amit: Я не хочу блокировать всю таблицу, как я упоминал в вопросе. Таким образом, он будет действовать как один за другим. Мне просто нужен оптимизированный способ, предполагающий 1 миллион общих строк в таблице. Таким образом, по одной моде может потребоваться много времени. Morever, Мне нужны не повторяемые чтения. Есть ли способ, чтобы он выбирал только те строки, которые ранее не читались. Извините за такое длинное описание. –