Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Aktualisierte Zeile abrufen

Je nachdem, was Sie tun, müssen Sie möglicherweise die Tabellensyntax von OUTPUT verwenden . Eine Möglichkeit besteht darin, eine temporäre Tabelle / Tabellenvariable anzugeben.

DECLARE @T TABLE
(
    MyID INT NOT NULL
)

UPDATE Task
SET MyTime = GetDate(), MyUserId = @userid
OUTPUT INSERTED.MyID INTO @T
FROM (/* your FROM clause here */) Task

gbn hat eine Bearbeitung vor mir, die im Wesentlichen dasselbe wie oben sagt. Ich möchte hinzufügen, dass eine andere Möglichkeit, dies zu tun, darin besteht, zuerst die ID zu erfassen und dann nach ID zu aktualisieren. Außerdem sollte TOP 1 fast immer mit einem ORDER BY verwendet werden .

-- You may need to clean up the error handling. I just wanted
-- to put something simple in to remind that it is necessary.
DECLARE @userid INT; SET @userid = /* e.g., */ 1234
BEGIN TRANSACTION
IF @@ERROR <> 0 RETURN
DECLARE @TaskID INT
SET @TaskID = (SELECT TOP 1 TaskID FROM Task WITH (UPDLOCK) ORDER BY /* e.g., */ TaskID) -- TaskID should be the PK of MyTable. Must be unique.
IF @@ERROR <> 0 BEGIN ROLLBACK TRANSACTION RETURN END
UPDATE Task
SET MyTime = GETDATE(), MyUserId = @userid
WHERE TaskID = @TaskID
COMMIT TRANSACTION