Re: Access 2000 & Stored Procedures
From: Mary Chipman (mchip_at_online.microsoft.com)
Date: 06/24/04
- Next message: Dinesh T.K: "Re: SP3a and clients"
- Previous message: David: "Access 2000 & Stored Procedures"
- In reply to: David: "Access 2000 & Stored Procedures"
- Next in thread: David: "Re: Access 2000 & Stored Procedures"
- Reply: David: "Re: Access 2000 & Stored Procedures"
- Messages sorted by: [ date ] [ thread ]
Date: Thu, 24 Jun 2004 10:34:58 -0700
What you want to do is to re-write your stored procedure, creating an
explicit transaction (see "Explicit Transactions" and related topics
in SQL BOL). Inside the transaction you'll select the record to call ,
update the locking field, and store the record ID in a local variable,
all as one unit of work. If the update fails, then someone else got
there first, so you code the logic (see @@rowcount) to rollback and
try again. This way you won't get duplicates returned to simultaneous
callers.
--Mary
On Thu, 24 Jun 2004 08:43:52 -0700, "David"
<anonymous@discussions.microsoft.com> wrote:
>Hi All,
>I've a problem that requires a fairly lengthy introduction
>by me. If you've the time and the willpower I'd really
>appreciate your help.
>I'm running a application based on Access 2000 and SQL
>Server 2000.
>The system is designed to allocate a single record to a
>callcentre agent based on it being the most relevant
>record to call at the time (designated next call time,
>previous result etc.
>The agents Access db uses a pass-through query to run a
>stored procedure with a variable of the agent's ID.
>There stored procedure uses a query to get a single record
>to call and then updates a locking field within that
>record with the agent ID. The query will exclude any
>records already containing an agent ID. The stored
>procedure then passes the unique ID of the record back to
>the Access db. Access then uses find first to go to the
>correct record.
>When the agent finishes with that record it sets the
>locking field back to 0 and the process starts again!
>The problem is that if several agents request a record at
>the same time the SQL profiler shows different requests
>being run for each agent, but they get the same unique ID
>passed back to all of them, and the record is locked with
>the agent ID of the first agent to make the request. The
>agents will all get the same record on screen and attempt
>to call the same company, which is obviously not ideal!
>
>Thanks in advance
>
>p.s In case it helps, here is the stored procedure I run:
>CREATE PROC spLockNewRec
> @PHIDToLock smallint
>AS
>
>DECLARE @CSIDToLock int
>
>BEGIN
>UPDATE tblClientFile SET tblClientFile.intPHIDLock = 0
>WHERE tblClientFile.intPHIDLock = @PHIDToLock
>END
>
>SET rowcount 1
>
>BEGIN TRANSACTION
>
>SELECT @CSIDToLock = dbo.tblClientFile.CSID
>FROM dbo.tblDecisionMakers RIGHT OUTER JOIN
> dbo.tblClientFile ON
>dbo.tblDecisionMakers.CSID = dbo.tblClientFile.CSID LEFT
>OUTER JOIN
> dbo.tblCallResult ON
>dbo.tblDecisionMakers.CRID = dbo.tblCallResult.CRID
>WHERE (dbo.tblDecisionMakers.dtmNextCallTime <= GETDATE
>()) AND (dbo.tblClientFile.intPHIDLock = 0) AND (NOT
>(dbo.tblCallResult.intCallbackType = 9) OR
> dbo.tblCallResult.intCallbackType IS
>NULL) AND (NOT (dbo.tblClientFile.charTel IS NULL)) OR
>
>(dbo.tblDecisionMakers.dtmNextCallTime IS NULL) AND
>(dbo.tblClientFile.intPHIDLock = 0) AND (NOT
>(dbo.tblCallResult.intCallbackType = 9) OR
> dbo.tblCallResult.intCallbackType IS
>NULL) AND (NOT (dbo.tblClientFile.charTel IS NULL))
>ORDER BY dbo.tblCallResult.intCallPriority,
>dbo.tblDecisionMakers.dtmNextCallTime
>
>UPDATE tblClientFile
>SET intPHIDLock = @PHIDToLock, dtmPHIDLock = getdate()
>where tblClientFile.CSID = @CSIDToLock
>
>COMMIT TRANSACTION
>
>SELECT @CSIDToLock
>GO
- Next message: Dinesh T.K: "Re: SP3a and clients"
- Previous message: David: "Access 2000 & Stored Procedures"
- In reply to: David: "Access 2000 & Stored Procedures"
- Next in thread: David: "Re: Access 2000 & Stored Procedures"
- Reply: David: "Re: Access 2000 & Stored Procedures"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|