문제

페이지를 볼 때 데이터를 선택하고 '보기' 열을 업데이트해야 합니다. 하나의 쿼리에서 이 작업을 수행할 수 있는 방법이 있습니까, 아니면 별도의 쿼리에 사용해야 합니까?

도움이 되었습니까?

해결책

트랜잭션을 사용하고 싶지 않거나 사용할 필요가 없는 경우 먼저 보기 수를 업데이트한 다음 값을 선택하여 사용자에게 반환하는 저장 프로시저를 만들 수 있습니다.

다른 팁

한 번의 트랜잭션에서 두 개의 문으로 이 작업을 수행해야 합니다.

Begin Tran

Update Pages Set Views = Views + 1 Where ID = @ID
Select Columns From Pages Where ID = @ID

Commit Tran

SQL Server를 사용하는 RDBMS를 나열하면 출력 문이 있습니다.

USE AdventureWorks;
GO
DECLARE @MyTestVar table (
    OldScrapReasonID int NOT NULL, 
    NewScrapReasonID int NOT NULL, 
    WorkOrderID int NOT NULL,
    ProductID int NOT NULL,
    ProductName nvarchar(50)NOT NULL);

UPDATE Production.WorkOrder
SET ScrapReasonID = 4
OUTPUT DELETED.ScrapReasonID,
       INSERTED.ScrapReasonID, 
       INSERTED.WorkOrderID,
       INSERTED.ProductID,
       p.Name
    INTO @MyTestVar
FROM Production.WorkOrder AS wo
    INNER JOIN Production.Product AS p 
    ON wo.ProductID = p.ProductID 
    AND wo.ScrapReasonID= 16
    AND p.ProductID = 733;
SELECT OldScrapReasonID, NewScrapReasonID, WorkOrderID, 
    ProductID, ProductName 
FROM @MyTestVar;
GO

PostgreSQL의 업데이트 문에는 SELECT 문과 같은 결과 집합을 반환하는 RETURNING 절이 있습니다.

UPDATE mytable
 SET views = 5
 WHERE id = 16
 RETURNING id, views, othercolumn;

나는 이것이 표준이 아니라고 확신합니다.다른 데이터베이스에서 이를 구현하는지 모르겠습니다.

편집하다:방금 귀하의 질문에 "MySQL" 태그가 있는 것을 확인했습니다.질문 자체에서 언급해야 할 수도 있습니다.그래도 좋은 일반적인 데이터베이스 질문입니다. 다른 데이터베이스에서 이를 수행하는 방법을 보고 싶습니다.

저는 이 트릭을 Java와 함께 사용했으며 SQL Server에서는 단일 ReadyStatement에서 두 개의 명령을 보낼 수도 있습니다.

update tablex set y=z where a=b \r\n select a,b,y,z from tablex

하지만 생각한 대로 작동하려면 커밋된 읽기 트랜잭션에 있어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top