I have written a cursor:
DECLARE CURSOR_SendMail CURSOR FAST_FORWARD
FOR
SELECT AlertId,AlertDetailsId,AlertDescription
,AlertTarget,ProjectDetailId,Subject
FROM tblAlert
WHERE AlertId > @MaxAlertID
Here @MaxAlertID
is some id so that records above that id will be mailed.
What I want to ask is:
While fetching records one-by-one and mailing them, will any new record inserted in tblAlert table also be considered or just the records that were available while declaring the cursor.
e.g.
At the time of declaring cursor max id present in table is 1000 and @MaxAlertID
is 0.
So when I start sending mail for each record from 1 and above and I reach at some record 517 and a couple of records get added to tblAlert
with 1001 and 1002, so those 1001,1002 will be considered or just up-to 1000 will be considered.
Look at the documentation for DECLARE CURSOR
. There are options you can specify so that you get the behaviour you want - which you haven't told us.
If you don't want to consider new records, consider specifying STATIC
or KEYSET
. If you do want to consider new records, specify DYNAMIC
.
I can't actually remember what the default behaviour is - and can't seem to find it at the moment. If I needed specific behaviour, I'd always specify it rather than rely on the default.
The default is Dynamic, unless you have changed it.
To quote from the documentation:
DYNAMIC
Defines a cursor that reflects all data changes made to the rows in
its result set as you scroll around the cursor. The data values,
order, and membership of the rows can change on each fetch. The
ABSOLUTE fetch option is not supported with dynamic cursors.
So adding DYNAMIC to your cursor definition will give you what you want. Or do you need the opposite? Then make a STATIC cursor