Dirigere l'output di un'istruzione UPDATE su una variabile locale


12

Vorrei fare questo:

DECLARE @Id INT;

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

È possibile? So che posso dichiarare una variabile di tabella locale e indirizzare lì l'output ma preferirei saltarlo se possibile

Risposte:


15

No, perché potenzialmente stai OUTPUTraggruppando più righe, che non rientrerebbero in una variabile scalare.

È necessario eseguire l'output in una @Tabletabella dichiarata o variabile per gestire più righe di output.


Sì. Anche se l'indirizzo e-mail è univoco, non è possibile hackerarlo utilizzando DML componibile e un unico compito SELECT. Ottengo l'errore "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."Questo è un po 'sfortunato perché è una soluzione davvero pulita quando sai che stai interessando solo una singola riga.
Jon Seigel,

Capisco. Comunque posso dire SELEZIONARE @JNK = SomeColumn FROM SomeTable DOVE SomeOtherColumn = MatchesMultipleRows ... Allora perché questo vincolo non è stato applicato qui? Comunque grazie e dichiarerò semplicemente una variabile di tabella locale e avrò finito. La vita va a vanti. :)
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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.