Hi All,
I want a to create a stored procedure which returns 5 records, at the same time it checks the same records out for 30 minutes. So far I have this, but it would suffer badly from concurrency issues, so just want some help drafting it properly.
Thanks in advance.
Code:ALTER PROCEDURE [dbo].[Messages_GetMessages] @mailboxNumber varchar(50) = null, @state tinyint = null AS Update _Messages SET checkoutstamp = getdate() Where id in ( SELECT top 5 (id) FROM _Messages WHERE mailbox = CASE WHEN @mailboxNumber IS NULL THEN mailbox ELSE @mailboxNumber END AND state = CASE WHEN @state IS NULL THEN state ELSE @state END AND (checkoutstamp < dateadd(mi, -30, getdate()) OR checkoutstamp IS NULL) ORDER BY id DESC) SELECT TOP (5) ms.id, ms.mailbox, ms.timestamp, ms.state, ms.laststatechanged, ms.cli, m.duration, m.path, ms.checkoutstamp FROM dbo._Messages AS ms INNER JOIN dbo._Message AS m ON ms.message = m.id WHERE mailbox = CASE WHEN @mailboxNumber IS NULL THEN mailbox ELSE @mailboxNumber END AND state = CASE WHEN @state IS NULL THEN state ELSE @state END ORDER BY checkoutstamp DESC




Reply With Quote