UPDATE / SET / OUTPUT / FROM с выводом в переменную - PullRequest
2 голосов
/ 05 марта 2020

Рассмотрим следующую хранимую процедуру

CREATE PROCEDURE AssignCodeToCustomer (@customerId int)
AS
BEGIN
    DECLARE @code NVARCHAR(255)

    BEGIN TRY
        BEGIN TRANSACTION

        SELECT @code = (
            UPDATE
                Codes
            SET
                CustomerId = @customerId
            OUTPUT
                INSERTED.Code
            FROM (
                SELECT TOP 1
                    Code
                FROM
                    Codes
            ) AS c
            WHERE
                c.Code = Codes.Code

        -- Other stuff

        COMMIT TRANSACTION
    END TRY

    BEGIN CATCH
        BEGIN
            ROLLBACK TRANSACTION

            EXEC spLogSQLError
        END
    END CATCH
END
GO

Я получаю сообщение об ошибке «Неверный синтаксис рядом с ключевым словом UPDATE» в строке 10 (который содержит ключевое слово UPDATE). Я мог бы также сначала выбрать код, а затем назначить его, но, учитывая параллелизм, мне нужен только один запрос. Запрос работает, если я не пытаюсь установить выходное значение в переменную. Как я могу исправить эту ошибку или я должен использовать другой подход?

...