programing

출력을 변수로 업데이트

bestprogram 2023. 4. 22. 10:58

출력을 변수로 업데이트

업데이트 및 선택을 수행하려고 합니다. 기본적으로 인덱스를 기반으로 업데이트한 다음 업데이트된 행 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)

마지막에는 매니지먼트 스튜디오에서 빨간 꼬투리들이 사라졌을 때 일시적으로 흥분했기 때문에 포함되었습니다.아아, 다음과 같은 오류가 발생합니다.

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.

영향을 받는 행이 1개뿐일 경우 테이블 변수 없이 수행할 수 있습니다.

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

영향을 받는 행이 1개뿐이라면 다음과 같이 ID를 꺼낼 수 있습니다.

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

또는 영향을 받는 행이 1개뿐인 경우:

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