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