sql >> Databáze >  >> RDS >> Sqlserver

Získejte aktualizovaný řádek

V závislosti na tom, co děláte, možná budete muset použít syntaxi tabulky OUTPUT . Možností je zadat dočasnou tabulku / proměnnou tabulky.

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 má přede mnou úpravu, která v podstatě říká totéž, co výše. Rád bych dodal, že dalším způsobem, jak to udělat, je nejprve uchopit ID a poté aktualizovat podle ID. Také TOP 1 by měl být téměř vždy použit s 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. Vytvoření spouštěče v Oracle Express

  2. Jak přidat podformulář do formuláře v Accessu 2016

  3. Nelze se připojit k místnímu serveru MySQL přes soket '/var/lib/mysql/mysql.sock' (2)

  4. Parametrizujte klauzuli SQL IN