UPDATE 문의 OUTPUT을 로컬 변수로 지정


12

나는 이것을하고 싶다 :

DECLARE @Id INT;

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

이것이 가능합니까? 로컬 테이블 변수를 선언하고 출력을 거기에 지시 할 수 있지만 가능한 경우 건너 뛰기를 선호합니다.

답변:


15

아니요, OUTPUT스칼라 변수에 맞지 않는 여러 행을 잠재적으로 팅 하고 있기 때문 입니다.

당신은에 출력 할 필요가 @Table출력의 여러 행을 처리 할 변수 또는 선언 된 테이블.


네. 이메일 주소가 고유하더라도 컴포저 블 DML과 단일 할당을 사용하여 해킹 할 수는 없습니다 SELECT. 오류가 발생 "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."합니다. 단일 행에만 영향을 미친다는 것을 알면 정말 깨끗한 솔루션이기 때문에 다소 유감입니다.
Jon Seigel

이해 했어요. 그러나 SELECT @JNK = SomeColumn from SomeTable WHERE SomeOtherColumn = MatchesMultipleRows ... 그렇다면 왜이 제약 조건이 적용되지 않았습니까? 어쨌든 감사하고 로컬 테이블 변수를 선언하고 완료합니다. 인생은 계속됩니다. :)
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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.