UPDATE deyiminin OUTPUT değerini yerel bir değişkene yönlendirme


12

Bunu yapmak istiyorum:

DECLARE @Id INT;

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

Bu mümkün mü? Yerel bir tablo değişkeni bildirebilir ve çıktıyı oraya yönlendirebilirim, ancak mümkünse atlamayı tercih ederim

Yanıtlar:


15

Hayır, çünkü potansiyel OUTPUTolarak bir skaler değişkene sığmayacak birden fazla satır bağlıyorsunuz.

@TableBirden çok çıktı satırını işlemek için değişken veya bildirilen bir tabloya çıktı almanız gerekir .


Evet. E-posta adresi benzersiz olsa bile, oluşturulabilir DML ve tek bir atama kullanarak kesmek mümkün değildir SELECT. Hatayı alıyorum "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."Bu biraz talihsiz çünkü sadece tek bir satırı etkilediğinizi bildiğinizde gerçekten temiz bir çözüm.
— Jon Seigel

Anlıyorum. Ancak SELECT @JNK = SomeColumn from SomeTable NEREDEN SomeOtherColumn = MatchesMultipleRows ... Peki neden bu kısıtlama burada uygulanmadı? Neyse teşekkürler ve ben sadece yerel bir tablo değişkeni ilan edeceğim ve onunla yapılacak. Hayat Devam Ediyor. :)
— Andrei Rînea

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.