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

Các thủ tục được lưu trữ có khóa các bảng / hàng không?

Bạn có thể nhận được một điều kiện đua.

Nó có thể được thực hiện trong một câu lệnh:

  • Bạn có thể chỉ định trong một CẬP NHẬT
  • Các gợi ý về khóa cho phép một quy trình khác bỏ qua hàng này
  • Mệnh đề OUTPUT trả về dữ liệu cho người gọi

Hãy thử điều này ... (chỉnh sửa:đã loại bỏ khóa giữ)

Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST)
OUTPUT INSERTED.*
SET
   AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
WHERE
   AssignedTo is null and [TsServer] = @Server   -- not needed -> and UserName = @ServerUser

Nếu không, bạn có thể cần một lựa chọn riêng

Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST)
SET
    -- yes, assign in an update
   @ServerUser = UserName,
   -- write
   AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
OUTPUT INSERTED.*
WHERE
   AssignedTo is null and [TsServer] = @Server   -- not needed -> and UserName = @ServerUser

SELECT ...

Vui lòng xem phần này để biết thêm: Điều kiện chạy đua hàng đợi quy trình máy chủ SQL




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL nếu Bản ghi bằng bản ghi trước nó

  2. Tìm các đối tượng được tham chiếu trong SQL Server:sys.dm_sql_referenced_entities

  3. Chú ý người dùng đang chạy SQL Server 2008 và SQL Server 2008 R2

  4. Làm cách nào để chỉ theo dõi các lệnh t-sql trong SQL Profiler?

  5. xem các giá trị đã thay đổi sau một tuyên bố cập nhật