ОБНОВЛЕНИЕ SQL с использованием необычного синтаксиса - PullRequest
0 голосов
/ 04 июня 2018

Сегодня я натолкнулся на эту хранимую процедуру, и меня смущает синтаксис.Он выполняет ОБНОВЛЕНИЕ, и запрос выглядит следующим образом:

DECLARE @TransactionStatus tinyint = 1, 
        @RedeemedAmount decimal(18,2) = 0, 
        @PromotionCodeAmount decimal(18,2) = 0,
        @EventDetailId int = 0

UPDATE PED
    SET @RedeemedAmount = PED.RedeemedAmount = PED.RedeemedAmount + PE.PromoCodeAmount, 
        @PromotionCodeAmount = PE.PromoCodeAmount,   
        @EventDetailId = PED.Id
FROM dbo.PromotionEvents AS PE 
JOIN dbo.PromotionEventDetails AS PED ON PED.EventId = PE.Id
    WHERE PED.Id IN (
        SELECT TOP 1 PED.ID
        FROM dbo.PromotionEvents AS PE 
        JOIN dbo.PromotionEventDetails AS PED ON PED.EventId = PE.Id
        WHERE PE.Id = @EventId
    AND PED.Amount >= PED.RedeemedAmount + PE.PromoCodeAmount 
        AND PE.StartDate <= GETDATE() AND PE.EndDate > GETDATE()
        AND PE.MStatusId = 1
        AND PED.MStatusId = 1
        ORDER BY PED.CreatedDateTime)

Это только часть всей хранимой процедуры.Мне просто нужно понять, что делает эта часть?

SET @RedeemedAmount = PED.RedeemedAmount = PED.RedeemedAmount + PE.PromoCodeAmount, 

Обратите внимание, что на этой строке есть два знака равенства.

1 Ответ

0 голосов
/ 04 июня 2018

Эта строка делает две вещи одновременно:

  • Обновляет столбец PromotionEventDetails.RedeemedAmount
  • Сохраняет одно и то же значение в @RedeemedAmount переменная

Кажется, это сочетание обычного UPDATE ... SET column = expression с синтаксисом «set variable» SQL Server, равным SET @variable = expression.Тесты показывают, что невозможно сделать @a = @b = col1 или col1 = col2 = col3, это работает только для одной переменной и одного целевого столбца.

...