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.