Проверка SQL, если значение больше 4, затем обновите другой столбец, остановите обновления

#sql #sql-server #sql-server-2008

#sql #sql-server #sql-server-2008

Вопрос:

У Меня есть одна таблица, обновляющая два столбца, если во втором столбце обновление больше или равно 4, установите для другого столбца значение 0

Попробовал оператор case …. но все еще не работает, пожалуйста, помогите!

 update [dbo].[QueuedSms_TEST]
    set issent = 0,pendingstatusid = pendingstatusid   1
    where sendresponse is null

while (select pendingstatusid from [dbo].[QueuedSms_TEST]) > 3
    update [dbo].[QueuedSms_TEST]
    set issent = -1
  

Комментарии:

1. Можете ли вы определить «не работает»? Что этот цикл пытается сделать? Это похоже на бесконечный цикл, потому что вы никогда не меняете условие цикла внутри цикла. Вам нужно предоставить нам гораздо больше информации здесь.

2. @SeanLange Я не знаю, как, но я понимаю, чего он хочет. Он хочет использовать autonumeric для pendingstatus, и если установлено значение > = 4 issent = -1

Ответ №1:

Сначала вы создаете временный запрос, чтобы получить row_number, а затем обновляете его с помощью требуемых правил.

Демонстрация SQL

 WITH cte as (
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY pendingstatusid) as rn
    FROM QueuedSms_TEST
)    
UPDATE cte
SET pendingstatusid = rn,
    issent = CASE WHEN rn > 3 
                  THEN -1
                  ELSE 0
             END;