Arahkan OUTPUT pernyataan UPDATE ke variabel lokal

12

Saya ingin melakukan ini:

DECLARE @Id INT;

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

Apakah ini mungkin? Saya tahu saya bisa mendeklarasikan variabel tabel lokal dan mengarahkan output di sana, tetapi saya lebih suka melewatkannya jika memungkinkan

Andrei Rînea
sumber

Jawaban:

15

Tidak, karena Anda berpotensi melakukan OUTPUTbeberapa baris, yang tidak sesuai dengan variabel skalar.

Anda perlu output ke dalam @Tablevariabel atau tabel yang dideklarasikan untuk menangani beberapa baris output.

JNK
sumber
Ya. Meskipun alamat emailnya unik, tidak mungkin untuk meretasnya menggunakan DML yang dapat dikompilasi dan satu tugas SELECT. Saya mendapatkan kesalahan "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."Ini agak disayangkan karena ini solusi yang sangat bersih ketika Anda tahu Anda hanya mempengaruhi satu baris.
Jon Seigel
Saya mengerti. Namun saya dapat mengatakan SELECT @JNK = SomeColumn DARI SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ... Jadi mengapa kendala ini tidak diterapkan di sini? Pokoknya terima kasih dan saya hanya akan mendeklarasikan variabel tabel lokal dan selesai dengan itu. Hidup terus berlalu. :)
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
Rangel Borene
sumber