Направьте OUTPUT оператора UPDATE на локальную переменную

12

Я хотел бы сделать это:

DECLARE @Id INT;

UPDATE Logins
SET    SomeField = 'some value'
OUTPUT @Id = Id
WHERE  EmailAddress = @EmailAddress -- this is a parameter of the sproc

Это вообще возможно? Я знаю, что могу объявить локальную табличную переменную и направить туда вывод, но я бы предпочел пропустить ее, если это возможно

Андрей Ринея
источник

Ответы:

15

Нет, потому что вы можете OUTPUTуказывать несколько строк, которые не вписываются в скалярную переменную.

Вам нужно вывести в @Tableпеременную или объявленную таблицу для обработки нескольких строк вывода.

JNK
источник
Ага. Даже если адрес электронной почты уникален, его невозможно взломать, используя составной DML и одно назначение SELECT. Я получаю ошибку "A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate source of rows for an INSERT statement."Это довольно неудачно, потому что это действительно чистое решение, когда вы знаете, что влияете только на один ряд.
Джон Зигель
Я понимаю. Однако я могу сказать, что SELECT @JNK = SomeColumn FROM SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ... Так почему же здесь не было применено это ограничение? В любом случае спасибо, и я просто объявлю локальную переменную таблицы и покончим с этим. Жизнь идет. :)
Андрей Ринея
0
declare @status_atividade bit;

update t1 set         
    t1.idioma = t2.idioma, 
    t1.regiao = t2.regiao, 
    t1.fuso_horario = t2.fuso_horario,
    @status_atividade = t2.status_atividade

from 
    @usuario as t1  
join 
    dbo.locatario as  t2 
on 
    t1.id_locatario = t2.id_locatario

select @status_atividade
Рангель Борене
источник