怎么样循环调用存储过程?

zlbpolly 2014-06-08 06:43:12
背景交待:
----
有一个存储过程sp_change,处理一些业务,返回值:是否处理成功(字符串)。
现在有一个待处理的业务表table1,这里是每天提交上来的待处理业务。

需求:---
现在需要循环业务表table1每条记录,如果未处理过,则把table1的几个字段传给 存储过程sp_change 处理,并得到返回值,记录执行是否成功。

因为需要每天定时处理业务,所以该功能想放在存储过程里,请问怎么实现?
----对sql不熟悉,不知道怎么循环table1,在循环t中执行存储过程,是用游标还是什么循环?
最好能写下关键的sql语句,感谢!
...全文
728 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2014-06-09
  • 打赏
  • 举报
回复
执行存储过程后,用一个变量来保存结果。加一个语句,把执行的结果保存到表中,如果表table1中有对应的字段,直接update表中的字段等于取到的结果,不过要注意一一对应的关系
zlbpolly 2014-06-09
  • 打赏
  • 举报
回复
@galenkeny:感谢指导,是我想要的功能,第二个用游标时,怎么能得到存储过程的返回结果? 就是这里怎么得到返回结果,因为结果是文字提示,要存到table1里,方便以后查看。 EXEC sp_change @col1,@col2 存储过程中返回值是这样的 @sResultMsg varchar(100) OUTPUT SET @sResultMsg= '返回各种结果';
exception92 2014-06-09
  • 打赏
  • 举报
回复
楼上 用游标或者while循环 都可以的; 其实 放在程序中处理也可以的。
以学习为目的 2014-06-09
  • 打赏
  • 举报
回复
用游标的大概思路
DECLARE @col1 VARCHAR(10),
        @col1 VARCHAR(10)
 BEGIN 
     DECLARE c_table1  CURSOR FOR
        SELECT  col1,col2 FROM table1
          OPEN c_table1
          FETCH NEXT FROM c_table INTO @col1,@col2
            WHILE @@fetch_status=0
            BEGIN TRANSACTION
                PRINT @col1,@col2
                EXEC sp_change @col1,@col2
                IF @@ERROR=0
                 PRINT '处理成功'
                FETCH NEXT FROM c_table INTO @col1,@col2 
                ELSE
             ROLLBACK TRANSACTION
 CLOSE c_table
 DEALLOCATE c_table
 END
 GO
以学习为目的 2014-06-09
  • 打赏
  • 举报
回复
这是不用游标的大概思路
declare @tab table(ID int identity(1,1), col1  varchar(10),col2 varchar(10))  
insert into @tab 
            select  id, col1,col2   --需要传给存储过程的字段
                         from table1  
               
  
declare @i int  
declare @j int  
set @i = 0  
  
select @j = MAX(ID) from @tab
BEGIN TRANSACTION 
while @i < @j begin  
    set @i = @i+1   
    set @col1= null  
    set @col2= null  

    select @col1=col1, @col2=col2 from @tab where ID = @i  
    exec sp_change @col1,@col2 --这个地方根据你的存储过程有output输出值,改下后面的写法
    IF   @@ERROR <>0 
    BEGIN 
     PRINT  '处理不成功'
    ELSE
      PRINT '处理成功'
          END
 COMMIT TRANSACTION
GO
以学习为目的 2014-06-09
  • 打赏
  • 举报
回复
我觉得可以用游标
發糞塗牆 2014-06-09
  • 打赏
  • 举报
回复
另外一个贴回复你了
lgq_liang 2014-06-09
  • 打赏
  • 举报
回复
引用 8 楼 zlbpolly 的回复:
@galenkeny: 这样执行存储过程后,怎么把结果用变量保存? EXEC sp_change @col1,@col2
如果实在想要结果的话,你把每次执行的结果保存到一个实体表中,不过这玩意有用吗。你要结果干啥
zlbpolly 2014-06-09
  • 打赏
  • 举报
回复
有答案了,结账,感谢大家

 declare @out varchar(100)
 exec sp_ChangeJqm '98f00b20','12345678',0, @out output
 select @out
zlbpolly 2014-06-09
  • 打赏
  • 举报
回复
@galenkeny: 这样执行存储过程后,怎么把结果用变量保存? EXEC sp_change @col1,@col2

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧