2

我需要在查看页面时选择数据并更新“视图”列有没有办法在一个查询中执行此操作,还是我必须使用不同的查询?

4

5 回答 5

2

您必须在一个事务中的两个语句中执行此操作

Begin Tran

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

Commit Tran
于 2008-09-04T12:39:53.777 回答
2

如果您不想/不需要使用事务,您可以创建一个存储过程,首先更新视图计数,然后选择值并将它们返回给用户。

于 2008-09-04T12:45:18.943 回答
1

如果您列出了您正在使用的 RDBMS 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
于 2008-09-04T16:17:51.990 回答
0

PostgreSQL 的UPDATE语句有 RETURNING 子句,它会像 SELECT 语句一样返回一个结果集:

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

我很确定这不是标准的。我不知道是否有任何其他数据库实现它。

编辑:我刚刚注意到你的问题有“MySQL”标签。也许您应该在问题本身中提及它。这是一个很好的通用数据库问题 - 我想看看如何在其他数据库中做到这一点。

于 2008-09-04T12:48:25.957 回答
0

我在 Java 中使用了这个技巧,SQL Server 也可以让你在一个 PreparedStatement 中发送两个命令。

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

这将需要在读取提交的事务中才能像您认为的那样工作。

于 2009-04-06T01:12:32.840 回答