출력을 변수로 업데이트
업데이트 및 선택을 수행하려고 합니다. 기본적으로 인덱스를 기반으로 업데이트한 다음 업데이트된 행 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
'programing' 카테고리의 다른 글
스위치 문의 여러 값에 대한 PowerShell 구문은 무엇입니까? (0) | 2023.04.22 |
---|---|
Outlook에서 첨부 파일을 다운로드하여 Excel로 열기 (0) | 2023.04.22 |
ASP를 사용하는 가장 큰 장점.넷 MVC 대 웹 폼 (0) | 2023.04.22 |
Unix 쉘 스크립트에서 환경 변수가 설정되어 있는지 확인하는 간결한 방법은 무엇입니까? (0) | 2023.04.22 |
두 SELECT 문 결과 결합 (0) | 2023.04.22 |