读书人

求 怎么在存储过程中遍历一条条数据

发布时间: 2012-06-08 12:55:24 作者: rapoo

求高手指点 如何在存储过程中遍历一条条数据,保存到相应表中
使用接口获取数据返回一个table,
table中保存的是公司人员在职与离职信息,(员工是否离职取决于该条数据中的字段"离职时间"是否为不为空)
如何该条数据字段"离职时间"不为空,就将数据保存到离职表中,
如果该条数据字段"离职时间"为空,就将该条数据保存到在职表中,
如何在存储过程一条一条遍历table中的数据,将数据保存到相应的表中
希望高手能给个小例子,或者是直接贴在留言栏 谢谢了

[解决办法]
我有个ORACLE的例子,你要不要
[解决办法]
你将接口得来的数据放到临时表中,然后获取临时表中

离职时间 不为空 的数据保存到离职表中
select 字段 from 临时表 into 离职表 where 离职时间<>''

离职时间 为空 的该条数据保存到在职表中,
select 字段 from 临时表 into 在职表 where 离职时间=''


这个如果是数据库的接口可以这样做,如何是web service 直接在程序里判断



[解决办法]

SQL code
declare FUserID_cursor cursor for    select t.FUserID    from #TempTable t    --where t.FQuitPostDate <>''//分开处理时用        declare @FUserID_info NVARCHAR (50)    open FUserID_cursor     fetch next from FUserID_cursor into @FUserID_info    while(@@FETCH_STATUS=0)    begin        declare @FQuitPostDate as NVARCHAR (50)                        select     @FQuitPostDate = FQuitPostDate from #TempTable where FUserID = @FUserID_info        if @FQuitPostDate <>''        begin            INSERT INTO FIsSAPData (                FUserID,                FUserName,                FEmail,                FPosition,                FQuitPostDate,                )                SELECT                 FUserID,                FUserName,                FEmail,                FPosition,                FQuitPostDate,                FROM #TempTable                where FUserID = @FUserID_info                fetch next from FUserID_cursor into @FUserID_info        end        else        begin            INSERT INTO FIsNotSAPData (                FUserID,                FUserName,                FEmail,                FPosition,                FQuitPostDate,                )                SELECT                 FUserID,                FUserName,                FEmail,                FPosition,                FQuitPostDate,                FROM #TempTable                where FUserID = @FUserID_info                fetch next from FUserID_cursor into @FUserID_info        end    end
[解决办法]
探讨
建议不要使用游标,数据处理量不大时,可以使用游标,否则存储过程将会执行得很慢。
个人建议使用 Select into 方法 例如: Select a.MainKey,a.name,a.LeaveTime into table_B(MainKey,name,LeaveTime) from tbale_A where a.leaveTime is not null

[解决办法]
如果是我,我不会用存储过程做,直接用C#做个函数来处理这个table,再用C#的函数来insert,存储过程无论是开发,维护,都特别的麻烦,没有自动对齐,你看见前半个大括号,找后半个也许就要好几分钟,没有debug,排错的时候只能用输出.
还有各种的不爽.
反正我是能不用procedure就不用.
[解决办法]
设定游标 离职 查询在table中 离职的人员id
循环游标 insert到离职表中
关闭游标
设定游标 在职 查询在table中 在职的人员id
循环游标 insert到在职表中
关闭游标

读书人网 >asp.net

热点推荐