|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于update操作,event中依次记录旧行,新行的值。金额|成绩
原帖地点:
http://community.csdn.net/Expert/topic/3190/3190686.xml?temp=.6296961
表test中纪录:
aabb
00150.5
00260
00315.4
00425
00548
...
输出任一金额,然后在表中查找是不是有该金额或几笔记录的算计即是该金额.
如:输出25,则要找出004,输出85,则要找出002与004,顺次类推。
------------------------------------------------------------------------------------
--测试数据
createtabletest(aavarchar(10),bbnumeric(10,2))
inserttestselect001,50.5
unionallselect002,60
unionallselect003,15.4
unionallselect004,25
unionallselect005,48
unionallselect006,37
go
--查询函数
createfunctionfn_search(@Numnumeric(10,2))
returns@rtable(aavarchar(10),bbnumeric(10,2))
as
begin
declare@ttable(aavarchar(8000),aa1varchar(10),bbnumeric(10,2),levelint)
declare@lint
insert@rselectaa,bbfromtestwherebb=@num
if@@rowcount>0gotolb_exit
set@l=0
insert@tselect,+aa+,,aa,bb,@lfromtestwherebb<@num
while@@rowcount>0
begin
insert@rselectdistincta.aa,a.bb
fromtesta,(
selecta.aa,a.bb,aa1=b.aafromtesta,@tb
whereb.level=@l
andb.aa1<a.aa
anda.bb=@num-b.bb
)bwherea.aa=b.aaorcharindex(,+a.aa+,,b.aa1)>0
if@@rowcount>0gotolb_exit
set@l=@l+1
insert@tselectb.aa+a.aa+,,a.aa,a.bb+b.bb,@l
fromtesta,@tb
whereb.level=@l-1
andb.aa1<a.aa
anda.bb<@num-b.bb
end
lb_exit:
return
end
go
--挪用测试1
select*fromdbo.fn_search(25)
/*--了局
aabb
----------------------
00425.00
(所影响的行数为1行)
--*/
--挪用测试2
select*fromdbo.fn_search(135.5)
/*--了局
aabb
----------------------
00150.50
00260.00
00425.00
00548.00
00637.00
(所影响的行数为5行)
--*/
--挪用测试3(找不到的,无前往值)
select*fromdbo.fn_search(135.7)
/*--了局
aabb
----------------------
(所影响的行数为0行)
--*/
go
droptabletest
dropfunctionfn_search
我们分析上面的两个操作,都有一个“删除数据”的过程。 |
|