sql >> Database >  >> RDS >> Sqlserver

Krijg bijgewerkte rij

Afhankelijk van wat u doet, moet u mogelijk de tabelsyntaxis van OUTPUT . gebruiken . Een mogelijkheid is om een ​​tijdelijke tabel / tabelvariabele op te geven.

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 kreeg een bewerking voor me die in wezen hetzelfde zegt als hierboven. Ik wil hieraan toevoegen dat een andere manier om dit te doen, is om eerst de ID te pakken en vervolgens op ID bij te werken. Ook moet TOP 1 bijna altijd worden gebruikt met een 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. FORALL-instructie met VALUES-OF Bound-clausule in Oracle Database

  2. Hoe een taak plannen in Oracle SQL Developer?

  3. Slechte gewoonten:alleen focussen op schijfruimte bij het kiezen van sleutels

  4. 2 manieren om de servernaam in SQL Server (T-SQL) te retourneren