使用表变量进行迭代?

时间:2013-07-08 20:17:27

标签: sql sql-server-2008-r2 ssms

我得到的是尝试构建一个存储过程,以一定的时间间隔作为Sql Server代理作业运行。它将查看Table X,其中包含大量内容,特别是我对sent_time列感兴趣。目前,存储过程在15到16分钟内搜索最新记录,并完成所需的一切。我的问题当然是在那个时间跨度内可以存在多条记录。所以我的想法是将所有结果(不仅仅是最新的)从那个时间跨度扔到我的表变量declare @alertId table (alerts int)中。然后我想使用在其余存储过程中抛出该表变量的任何Ids来根据存储的Ids发送消息。因此,基于表变量进行迭代的想法。更重要的是,我需要访问存储在那里的每个人Id,因为它需要作为参数传递给其他处理。

有没有人有这方面的经验?我意识到这里缺少代码,但我没有任何与我目前的代码有关的问题,更多的是我不知道如何从这里进步并且没有任何运气试图找到任何代码帮助我开始的信息。

1 个答案:

答案 0 :(得分:1)

迭代表的一种方法是使用游标。这是另一种我最喜欢纯粹美学原因的方式。性能方面不会有太大差异。

declare @alertId table (ID int primary key clustered, alerts int);

-- throw some Ids into @alertId here

declare @id int = -1; -- make sure this is less than any valid alert ID

while 1=1  
begin
    select top(1) @id = ID 
    from @alertId 
    where ID > @id 
    order by ID asc;

    if @id is null break; -- we're done

    -- do whatever needs to be done with @id
    print @id
end