programing

SQL: 행을 업데이트하고 쿼리 1개로 열 값을 반환합니다.

codeshow 2023. 8. 30. 22:19
반응형

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

반응형