Направіть висновок оператора 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.