Tùy thuộc vào công việc bạn đang làm, bạn có thể cần sử dụng cú pháp bảng của OUTPUT
. Một khả năng là chỉ định một bảng / biến bảng tạm thời.
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 có một chỉnh sửa trước mắt tôi mà về cơ bản nói điều tương tự như trên. Tôi muốn nói thêm rằng một cách khác để làm điều này là lấy ID trước và sau đó cập nhật theo ID. Ngoài ra, TOP 1 hầu như luôn được sử dụng với 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