Dirigez la SORTIE d'une instruction UPDATE vers une variable locale


12

Je voudrais faire ceci:

DECLARE @Id INT;

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

Est-ce seulement possible? Je sais que je peux déclarer une variable de table locale et y diriger la sortie, mais je préférerais la sauter si possible

Réponses:


15

Non, car vous pouvez potentiellement OUTPUTting plusieurs lignes, qui ne rentreraient pas dans une variable scalaire.

Vous devez effectuer une sortie dans une @Tabletable variable ou déclarée pour gérer plusieurs lignes de sortie.


Oui. Même si l'adresse e-mail est unique, il n'est pas possible de la pirater à l'aide de DML composable et d'une seule affectation SELECT. Je reçois l'erreur "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."C'est un peu malheureux car c'est une solution vraiment propre quand vous savez que vous n'affectez qu'une seule ligne.
Jon Seigel

Je comprends. Cependant, je peux dire SELECT @JNK = SomeColumn FROM SomeTable OERE SomeOtherColumn = MatchesMultipleRows ... Alors pourquoi cette contrainte n'a-t-elle pas été appliquée ici? Quoi qu'il en soit, merci et je vais simplement déclarer une variable de table locale et en finir avec elle. La vie continue. :)
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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.