En fonction de ce que vous faites, vous devrez peut-être utiliser la syntaxe de table OUTPUT
. Une possibilité est de spécifier une variable table/table temporaire.
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 a obtenu une modification en avant de moi qui dit essentiellement la même chose que ci-dessus. Je voudrais ajouter qu'une autre façon de le faire est de saisir l'ID d'abord, puis de mettre à jour par ID. En outre, TOP 1 devrait presque toujours être utilisé avec un ORDER BY
.
-- 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
Alors vous savez que vous mettez à jour exactement un enregistrement, mais vous ne saurez pas lequel avant sa mise à jour? – MartW