Frage

Ich brauche, um Daten auszuwählen, wenn eine Seite angezeigt wird, und aktualisieren Sie den 'Ansichten' - Spalte gibt es eine Möglichkeit, dies in einer Abfrage oder muss ich verwenden, um verschiedene Abfragen?

War es hilfreich?

Lösung

Wenn Sie nicht wollen/brauchen, um eine Transaktion, könnten Sie erstellen eine gespeicherte Prozedur, die ersten updates der Anzahl der Ansichten und wählt dann die Werte und gibt Sie an den Benutzer.

Andere Tipps

Sie würden müssen dies tun, in zwei Anweisungen in einer Transaktion

Begin Tran

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

Commit Tran

Es würde helfen, wenn Sie aufgelistet, die RDBMS Sie verwenden SQL Server hat die OUTPUT-Anweisung

Beispiel

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 UPDATE - Anweisung hat die RETURNING-Klausel wird ein ResultSet zurückgeben, wie Sie eine SELECT-Anweisung:

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

Ich bin mir ziemlich sicher, dass diese ist nicht standard, obwohl.Ich weiß nicht, ob andere Datenbanken implementieren.

Edit:Ich habe gerade bemerkt, dass Ihre Frage nach der "MySQL" - tag.Vielleicht sollte man erwähnen Sie es in der Frage selbst.Es ist eine gute generische Datenbank Frage und zwar würde ich gerne sehen, wie es in anderen Datenbanken.

Ich habe diesen trick mit Java und SQL-Server können Sie auch senden Sie zwei Befehle in einem einzigen PreparedStatement.

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

Diese müssen in einem read-commit-Transaktion zu arbeiten, wie Sie denken, sollte es aber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top