TSQL Cursor new record added

江枫思渺然 提交于 2019-12-01 21:06:04

问题


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.


回答1:


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.




回答2:


The default is Dynamic, unless you have changed it.




回答3:


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



来源:https://stackoverflow.com/questions/9030349/tsql-cursor-new-record-added

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!