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.