【问题标题】:TSQL Cursor new record added添加了 TSQL 游标新记录
【发布时间】:2012-01-27 07:51:09
【问题描述】:

我写了一个游标:

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

这里 @MaxAlertID 是一些 id,因此高于该 id 的记录将被邮寄。

我想问的是:

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

例如

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

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

【问题讨论】:

    标签: sql tsql database-cursor


    【解决方案1】:

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

    如果您不想考虑新记录,请考虑指定STATICKEYSET。如果您确实想考虑新记录,请指定DYNAMIC

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      引用documentation

      动态

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

      因此,将 DYNAMIC 添加到您的光标定义中会给您想要的。或者你需要相反的?然后做一个STATIC光标

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        相关资源
        最近更新 更多