SQL: 행을 업데이트하고 쿼리 1개로 열 값을 반환합니다.
테이블의 행을 업데이트하고 해당 행에서 열 값을 가져와야 합니다.나는 이것을 할 수 있습니다.
UPDATE Items SET Clicks = Clicks + 1 WHERE Id = @Id;
SELECT Name FROM Items WHERE Id = @Id
그러면 테이블에 대한 두 개의 계획/액세스가 생성됩니다.T-SQL에서 UPDATE 문을 수정하여 하나의 계획/액세스로만 Name 열을 업데이트하고 반환할 수 있습니까?
C#, ADO.NET을 사용하고 있습니다.ExecuteScalar()
또는ExecuteReader()
방법들.
OUTPUT 절을 원합니다.
UPDATE Items SET Clicks = Clicks + 1
OUTPUT INSERTED.Name
WHERE Id = @Id
테이블에 한 번만 액세스:
DECLARE @Name varchar(MAX);
UPDATE Items SET Clicks = Clicks + 1 , @Name = Name WHERE Id = @Id;
SELECT @Name;
SQL Server 2005 이후 버전을 사용하는 경우 OUTPUT 절이 적합합니다.
이 경우 저장 프로시저를 사용합니다.
@id를 매개 변수로 사용하고 이 두 가지 작업을 모두 수행하는 저장 프로시저를 만듭니다.그런 다음 DbDataAdapter를 사용하여 저장 프로시저를 호출합니다.
select 문 안에서 하나의 행을 업데이트하고 반환할 수 없습니다.즉, 다른 답변에서 선택한 값을 사용할 수 없습니다.
제 경우에는 선택한 값을 쿼리에 사용하고 싶었습니다.제가 생각해 낸 해결책은 다음과 같습니다.
declare @NextId int
set @NextId = (select Setting from Settings where key = 'NextId')
select @NextId + ROW_NUMBER() over (order by SomeColumnOfYourTable) from YourTable
update Settings set Setting = Setting + @@ROWCOUNT
where key = 'NextId'
이건 sqlite에 필요했어요.
SQLite에서는 Returning 절을 사용하여 이 작업을 수행할 수 있습니다.
UPDATE Items SET Clicks = Clicks + 1
WHERE Id = @Id
Returning Name
자세한 내용은 https://www.sqlite.org/lang_returning.html 를 참조하십시오.
다음과 같은 모든 필드를 반환할 수도 있습니다.
UPDATE Items SET Clicks = Clicks + 1
WHERE Id = @Id
Returning *
언급URL : https://stackoverflow.com/questions/700786/sql-update-a-row-and-returning-a-column-value-with-1-query
'programing' 카테고리의 다른 글
CSS 그리드의 동일한 너비 열 (0) | 2023.08.30 |
---|---|
__read_macro, __init, __macro에 대한 좋은 설명 (0) | 2023.08.30 |
런타임 동안 Excel 응용 프로그램 숨기기 (0) | 2023.08.30 |
로컬 컴퓨터가 도메인에 있는지 확인하는 방법 (0) | 2023.08.30 |
항목 이름 바꾸기 및 파일 이름이 있는 경우 재정의 (0) | 2023.08.30 |