development

출력을 변수로 업데이트

big-blog 2021. 1. 9. 11:28
반응형

출력을 변수로 업데이트


업데이트를 수행하고 기본적으로 인덱스를 기반으로 업데이트 한 다음 업데이트 된 행 ID를 선택합니다.

OUTPUT 절을 사용하면 간단합니다.

UPDATE Foo
SET Bar = 1
OUTPUT INSERTED.Id
WHERE Baz = 2

하지만 이제 어떻게 이것을 변수에 넣을 수 있습니까?

DECLARE @id INT

이 세 가지는 작동하지 않습니다.

UPDATE Foo
SET Bar = 1
OUTPUT @id = INSERTED.Id
WHERE Baz = 2

SET @id =
(UPDATE Foo
 SET Bar = 1
 OUTPUT INSERTED.Id
 WHERE Baz = 2)

SET @id =
(SELECT Id FROM (UPDATE Foo
                 SET Bar = 1
                 OUTPUT INSERTED.Id Id
                 WHERE Baz = 2) z)

마지막 항목은 Management Studio에서 모든 빨간 물결 모양이 사라 졌을 때 일시적으로 흥분했기 때문입니다. 아아,이 오류가 발생합니다.

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.

하나의 행만 영향을받는 경우 테이블 변수없이 수행 할 수 있습니다.

DECLARE @id INT

UPDATE Foo 
SET Bar = 1, @id = id 
WHERE Baz = 2

SELECT @id 

업데이트는 여러 행에 영향을 줄 수 있으므로 결과를 저장할 테이블이 필요합니다.

declare @ids table (id int);

UPDATE Foo
SET Bar = 1
OUTPUT INSERTED.Id INTO @ids
WHERE Baz = 2

하나의 행만 영향을받는 것이 확실하다면 다음과 같이 ID를 가져올 수 있습니다.

declare @id int
select  top 1 @id = id
from    @ids

또는 하나의 행만 영향을받는 경우 :

DECLARE @id INT

UPDATE Foo 
SET @id = Bar = 1  ---Yes, this is valid!
WHERE Baz = 2

SELECT @id 

참조 URL : https://stackoverflow.com/questions/16847297/update-output-into-a-variable

반응형