У меня есть хранимая процедура, которая SELECT
выводит запись TOP 1
из таблицы и присваивает некоторым переменным значения столбцов.Затем SELECT
s 10 записей, где столбец Id
имеет то же значение, что и столбец переменной TOP 1
.
SELECT TOP 1 @Id = [Id]
FROM [TableA]
ORDER
BY [DateCreated], [Priority]
SELECT TOP 10 *
FROM [TableA]
WHERE [Id] = @Id;
Цель состоит в том, чтобы SELECT
одна запись, а затем получить 10 соответствийзаписи для обработки.Это работает, если одно соединение вызывает хранимую процедуру.У меня есть приложение, которое является многопоточным, и это затем вызывает проблему, потому что, если первая и вторая записи одинаковы Id
, я бы хотел, чтобы они были в одном наборе результатов, так что второй поток будет забиратьдругое значение.Вот где у меня проблема.Я пытался использовать подсказки HOLDLOCK, UPDLOCK, ROWLOCK
в первом операторе SELECT
, но это блокирует первую запись и позволяет другому потоку выбрать следующее значение, которое я хотел бы в первом потоке.Я также запустил TRANSACTION
в хранимой процедуре и изменил ISOLATION LEVEL
на READ COMMITTED
, но второй поток всегда получает и принимает следующее значение, прежде чем первый поток сможет SELECT
10 записей, где Id
с совпадением.
У кого-нибудь есть идеи, как мне поступить?Возможен ли такой подход?