一直没有好好写过存储过程,今天一个看起来很简单的问题,结果写了一下午的存储过程 

要做的是查询若干个表,然后对结果做些修改,最后返回这些结果。本来以为存储返回结果可以写return table之类的,后来才发现都是使用select语句来返回的。这样只能先产生一个临时表来保存最初查询结果,然后遍历做修改,最后返回临时表内容,并删除该表。

CREATE procedure sp_func
存储过程!_存储过程
as存储过程!_返回结果_02begin存储过程!_返回结果_03
存储过程!_存储过程_04
create table #tmpTable
存储过程!_存储过程_05(
存储过程!_存储过程_06
/*存储过程!_返回结果_07*/存储过程!_返回结果_08)
存储过程!_返回结果_09
declare curTable cursor for存储过程!_存储过程_10--存储过程!_存储过程_11存储过程!_存储过程_12open curTable
存储过程!_存储过程_13
存储过程!_返回结果_14
while 1=1存储过程!_返回结果_15begin存储过程!_返回结果_16    fetch next from curTable into --存储过程!_返回结果_17存储过程!_返回结果_18    if @@fetch_status <> 0存储过程!_返回结果_19        break存储过程!_返回结果_20    /*存储过程!_返回结果_21*/存储过程!_存储过程_22end存储过程!_返回结果_23
存储过程!_返回结果_24
close curTable
存储过程!_返回结果_25
deallocate curTable
存储过程!_存储过程_26
存储过程!_存储过程_27
select * from #tmpTable
存储过程!_存储过程_28
drop table #tmpTable
存储过程!_返回结果_29
存储过程!_存储过程_30
end存储过程!_存储过程_31
存储过程!_返回结果_32
go

大致上就是这样,对熟手来说这根本不算什么,是最常用的方法。