2008-09-04 69 views

回答

2

为此在两个语句如果你不希望/你需要使用一个交易,你可以创建一个存储过程,首先更新的观看次数,然后选择这些值并将它们返回给用户。

2

你将不得不在一个事务中

Begin Tran 

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

Commit Tran 
0

PostgreSQL的UPDATE语句的RETURNING子句将返回设置像一个SELECT语句的结果:

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

我敢肯定这是不是标准,但。我不知道其他数据库是否实现它。

编辑:我只是注意到你的问题有“MySQL”标记。也许你应该在问题中提到它。尽管这是一个很好的通用数据库问题 - 我想看看如何在其他数据库中执行此操作。

1

如果你列出你正在使用 SQL Server中的RDBMS这将有助于有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 

这将需要在读提交的事务中工作,就像你认为它应该。

相关问题