2008-09-04 6 views

ответ

2

Если вы не хотите/нужно использовать транзакцию, вы можете создать хранимую процедуру, которая первая обновляет счетчик просмотров, а затем выбирает значения и вернуть их пользователю. UPDATE заявления

2

Вы должны сделать это в двух операторов в одной транзакции

Begin Tran 

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

Commit Tran 
0

PostgreSQL имеет возвращающий пункт, который будет возвращать результирующий набор как ЗЕЬЕСТ:

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

Я уверен, что это не стандарт, хотя. Я не знаю, реализуют ли какие-либо другие базы данных.

Редактировать: Я только заметил, что ваш вопрос имеет тег «MySQL». Может быть, вы должны упомянуть об этом в самом вопросе. Это хороший общий вопрос базы данных, хотя - я хотел бы посмотреть, как это сделать в других базах данных.

1

Это поможет, если вы перечислили РСУБД вы используете SQL Server имеет оператор OUTPUT

Пример

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 
0

Я использовал этот трюк с Java и SQL Server также позволяет отправить две команды в одном PreparedStatement.

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

Это должно быть в прочитанной транзакции, чтобы работать, как вы думаете.

Смежные вопросы