Направіть висновок оператора 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змінну або оголошену таблицю для обробки декількох рядків виводу.


Так. Навіть якщо адреса електронної пошти унікальна, її неможливо зламати, використовуючи компільований 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 ОТ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.