반응형
출력을 변수로 업데이트
업데이트를 수행하고 기본적으로 인덱스를 기반으로 업데이트 한 다음 업데이트 된 행 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
반응형
'development' 카테고리의 다른 글
Rails의 URL에서 쿼리 문자열을 얻는 방법 (0) | 2021.01.09 |
---|---|
파이썬에서 setattr () 사용 (0) | 2021.01.09 |
Pandas Merge-열 중복을 방지하는 방법 (0) | 2021.01.09 |
Android Studio의 xcrun 개발자 경로 변경 (0) | 2021.01.09 |
Ansible에서 이중 중괄호 이스케이프 (0) | 2021.01.09 |