2015-04-29 5 views
0

Здесь есть просьба:Обновление с приоритетом

UPDATE TOP (1) InnerPortal.Feedback.QueueFeedback 
SET Busy = 1, BusyBy = @uid 
Output inserted.* 
WHERE (
     AccountCode = @account and 
     (Done is null or Done = 0) and 
     (Busy is NULL or Busy = 0) and 
     ((DATEPART(hour, DATEADD(HOUR, Utc, @utcNow)) >= 9) and 
     (DATEPART(hour, DATEADD(HOUR, Utc, @utcNow)) <= 20)) 
) 

Он получает первый основан «не занято» запись, где ключевое поле является AccountCode.
Если запись не найдена, то ничего не возвращается.
Далее У меня есть упорядоченный список AccountCode, и цель должна выпустить специальную логику:
Мне нужно создать что-то вроде цикла в этом запросе.
Он получит первый AccountCode из списка и попробует обновить.

  • если успех - он остановится и вернется Output inserted.*
  • Если обновление не было успешный запрос получит вторую запись из моего списка счетов и попытаться снова обновить.

Если цикл завершен и ничего не обновлено - Output inserted.* ничего не возвращает (как сейчас).
Можно ли выпустить один запрос? Благодаря!

+0

Какую базу данных и версии были вы используете? Пожалуйста, отметьте соответствующую версию базы данных, так как ответы могут различаться в зависимости от сервера базы данных (и ее версии), которую вы использовали. – Sathish

+0

'• если успех - он остановится и вернется. Выход вставлен. *' И цикл должен остановиться здесь или продолжить? –

+0

цикл должен быть остановлен – user2598575

ответ

0

UPDATE TOP (1) InnerPortal.Feedback.QueueFeedback

SET Busy = 1, BusyBy = @uid 
Output inserted.* 
from InnerPortal.Feedback.QueueFeedback 
join account 
    on AccountCode = account.id 
and AccountCode = @account 
and (Done is null or Done = 0) 
and (Busy is NULL or Busy = 0) 
and ( (DATEPART(hour, DATEADD(HOUR, Utc, @utcNow)) >= 9) 
     and (DATEPART(hour, DATEADD(HOUR, Utc, @utcNow)) <= 20)) 
Смежные вопросы