Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nhận hàng cập nhật

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn thêm một cột NOT NULL vào một bảng lớn trong SQL Server?

  2. Sự khác biệt giữa việc sử dụng phép nối chéo và đặt dấu phẩy giữa hai bảng là gì?

  3. Lấy dữ liệu với bộ ký tự UTF-8 từ máy chủ MSSQL bằng phần mở rộng PHP FreeTDS

  4. Truy vấn Chọn SUM của tôi trả về giá trị rỗng. Nó sẽ trả về 0

  5. Gói điều chỉnh Spotlight Cơ bản:Công cụ tối ưu hóa SQL miễn phí tốt nhất