日期:2014-05-17  浏览次数:20542 次

求高手指点 如何在存储过程中遍历一条条数据,保存到相应表中
使用接口获取数据返回一个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到在职表中
关闭游标