Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menggunakan tabel database sebagai antrian

Saya akan menggunakan bidang IDENTITY sebagai kunci utama untuk memberikan ID yang bertambah secara unik untuk setiap item yang antri, dan menempelkan indeks berkerumun di atasnya. Ini akan mewakili urutan item yang diantrekan.

Untuk menyimpan item dalam tabel antrian saat Anda memprosesnya, Anda memerlukan bidang "status" untuk menunjukkan status item tertentu saat ini (mis. 0=menunggu, 1=sedang diproses, 2=diproses). Ini diperlukan untuk mencegah item diproses dua kali.

Saat memproses item dalam antrean, Anda harus menemukan item berikutnya dalam tabel yang TIDAK sedang diproses. Ini harus sedemikian rupa untuk mencegah beberapa proses mengambil item yang sama untuk diproses pada waktu yang sama seperti yang ditunjukkan di bawah ini. Perhatikan petunjuk tabel UPDLOCK dan READPAST yang harus Anda perhatikan saat menerapkan antrian.

misalnya dalam sproc, seperti ini:

DECLARE @NextID INTEGER

BEGIN TRANSACTION

-- Find the next queued item that is waiting to be processed
SELECT TOP 1 @NextID = ID
FROM MyQueueTable WITH (UPDLOCK, READPAST)
WHERE StateField = 0
ORDER BY ID ASC

-- if we've found one, mark it as being processed
IF @NextId IS NOT NULL
    UPDATE MyQueueTable SET Status = 1 WHERE ID = @NextId

COMMIT TRANSACTION

-- If we've got an item from the queue, return to whatever is going to process it
IF @NextId IS NOT NULL
    SELECT * FROM MyQueueTable WHERE ID = @NextID

Jika pemrosesan item gagal, apakah Anda ingin dapat mencobanya lagi nanti? Jika demikian, Anda harus mengatur ulang status kembali ke 0 atau sesuatu. Itu akan membutuhkan lebih banyak pemikiran.

Atau, jangan gunakan tabel database sebagai antrian, tetapi sesuatu seperti MSMQ - saya pikir saya akan memasukkannya ke dalam campuran!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara yang baik untuk memangkas semua karakter spasi putih dari string di T-SQL tanpa UDF dan tanpa CLR?

  2. Cara MENGUBAH beberapa kolom sekaligus di SQL Server

  3. Dapatkan karakter antara 2 karakter khusus pertama dalam SQL

  4. Tetapkan Profil Publik Default untuk Database Mail (SSMS)

  5. Apa perbedaan kinerja utama antara tipe data varchar dan nvarchar SQL Server?