Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zaktualizuj wiersz

W zależności od tego, co robisz, może być konieczne użycie składni tabeli OUTPUT . Istnieje możliwość określenia tymczasowej tabeli / zmiennej tabeli.

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 dostał przede mną edycję, która zasadniczo mówi to samo, co powyżej. Chciałbym dodać, że innym sposobem na zrobienie tego jest najpierw pobranie identyfikatora, a następnie aktualizacja według identyfikatora. Ponadto TOP 1 powinien być prawie zawsze używany z 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Logowanie nie powiodło się dla użytkownika „DOMAIN\MACHINENAME$”

  2. Funkcja COALESCE w TSQL

  3. Dynamiczne tabele T-SQL i tabele temp

  4. Jak znaleźć ustawienie ANSI_NULLS bazy danych w SQL Server (T-SQL)

  5. Co to jest operator logiczny w SQL Server — samouczek SQL Server / TSQL część 123