sql >> Databasteknik >  >> RDS >> Sqlserver

Få uppdaterad rad

Beroende på vad du gör kan du behöva använda tabellsyntaxen för OUTPUT . En möjlighet är att ange en temporär tabell/tabellvariabel.

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 har en redigering framför mig som i huvudsak säger samma sak som ovan. Jag skulle vilja tillägga att ett annat sätt att göra detta är att ta tag i ID:t först och sedan uppdatera med ID. Dessutom bör TOP 1 nästan alltid användas med en 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


  1. MySQL Skapa tabeller med främmande nycklar som ger felnummer:150

  2. ADDDATE() vs DATE_ADD() i MySQL:Vad är skillnaden?

  3. SQL flera kolumner i IN-sats

  4. Användarkontohantering, roller, behörigheter, autentisering PHP och MySQL - Del 3