2

ページが表示されたときにデータを選択し、「ビュー」列を更新する必要があります。これを1つのクエリで行う方法はありますか、それとも個別のクエリに使用する必要がありますか?

4

5 に答える 5

2

1つのトランザクションで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

SQLServerで使用している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
于 2008-09-04T16:17:51.990 に答える
0

PostgreSQLのUPDATEステートメントには、SELECTステートメントのような結果セットを返すRETURNING句があります。

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

しかし、これは標準ではないと確信しています。他のデータベースがそれを実装しているかどうかはわかりません。

編集:あなたの質問に「MySQL」タグが付いていることに気づきました。多分あなたは質問自体でそれを言及するべきです。ただし、これは一般的なデータベースの質問としては適切です。他のデータベースでそれを行う方法を確認したいと思います。

于 2008-09-04T12:48:25.957 に答える
0

私はこのトリックを Java で使用しました。SQL Server では、1 つの PreparedStatement で 2 つのコマンドを送信することもできます。

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

ただし、これは、あなたが思うように機能するために、コミットされた読み取りトランザクションに含まれている必要があります。

于 2009-04-06T01:12:32.840 に答える