仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1174|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之金额算计求值成绩

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:33:01 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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
我们分析上面的两个操作,都有一个“删除数据”的过程。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-14 20:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表