添加了TSQL Cursor新记录

时间:2012-01-27 07:51:09

标签: sql tsql cursor

我写了一个光标:

DECLARE CURSOR_SendMail CURSOR FAST_FORWARD  
FOR  
SELECT AlertId,AlertDetailsId,AlertDescription  
,AlertTarget,ProjectDetailId,Subject  
FROM    tblAlert   
WHERE AlertId > @MaxAlertID

此处@MaxAlertID是一个ID,以便将该邮件上方的记录邮寄。

我想问的是:

在逐个获取记录并邮寄它们的同时,还会考虑在tblAlert表中插入的任何新记录,或者只是在声明游标时可用的记录。

e.g。

在声明游标时,表中存在的最大ID为1000,@MaxAlertID为0。

所以,当我开始为1和以上的每条记录发送邮件时,我达到了一些记录517,并且有几条记录被添加到tblAlert 1001和1002,所以那些1001,1002将被考虑或将考虑最多1000个。

3 个答案:

答案 0 :(得分:4)

查看DECLARE CURSOR的文档。您可以指定选项,以便获得您想要的行为 - 您尚未告诉我们。

如果您想要考虑新记录,请考虑指定STATICKEYSET。如果您执行想要考虑新记录,请指定DYNAMIC

我实际上无法记住默认行为是什么 - 而且目前似乎无法找到它。如果我需要特定的行为,我总是指定它而不是依赖默认行为。

答案 1 :(得分:1)

默认为动态,除非您更改了它。

答案 2 :(得分:0)

引用documentation

  

DYNAMIC

     

定义一个游标,该游标反映对行中所做的所有数据更改   滚动光标时的结果集。数据值,   订单,行的成员资格可以在每次获取时更改。该   动态游标不支持ABSOLUTE提取选项。

因此,将 DYNAMIC 添加到光标定义中将为您提供所需的内容。或者你需要相反吗?然后制作 STATIC 光标