Dirija la SALIDA de una instrucción UPDATE a una variable local

12

Me gustaría hacer esto:

DECLARE @Id INT;

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

¿Es esto posible? Sé que puedo declarar una variable de tabla local y dirigir la salida allí, pero preferiría omitirla si es posible

Andrei Rînea
fuente

Respuestas:

15

No, porque potencialmente está OUTPUTcreando múltiples filas, que no encajarían en una variable escalar.

Debe generar una @Tabletabla variable o declarada para manejar varias filas de salida.

JNK
fuente
Sí. Incluso si la dirección de correo electrónico es única, no es posible hackearla utilizando DML composable y una sola asignación SELECT. Me sale el error "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."Esto es un poco desafortunado porque es una solución realmente limpia cuando sabes que solo estás afectando una sola fila.
Jon Seigel
Entiendo. Sin embargo, puedo decir SELECT @JNK = SomeColumn FROM SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ... Entonces, ¿por qué no se aplicó esta restricción aquí? De todos modos, gracias y simplemente declararé una variable de tabla local y terminaré con ella. La vida continua. :)
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
fuente