100分求以下代码变 成存储过程

showfray 2005-12-21 03:52:04
求以下代码变 成存储过程
要求写成一个存储过程,谢谢大家了。
数据库是:Microsoft SQLServer

<!--#include file="include/conn.asp"-->
<%
Set Ro=Server.CreateObject("Adodb.RecordSet")
so="Select * from GZMonth"
Ro.Open So,conn,1,1
Session("NowMonth")=Ro("GZMonth")
Session("NowYear")=Ro("GZYear")
Ro.Close
Set Ro=Nothing

Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="select * from gongzi where gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"'"
Rss.Open Sqls,conn,3,3

While Not Rss.Eof
Rss("XiaoJi1")=Rss("JB_Salary")+Rss("NG_Salary")+Rss("JS_Salary")+Rss("BuCha_Salary")
Rss("XiaoJi2")=Rss("YX_Salary")+Rss("Gl_Salary")
Rss("HeJi1")=Rss("JB_Salary")+Rss("NG_Salary")+Rss("JS_Salary")+Rss("BuCha_Salary")+Rss("YX_Salary")+Rss("Gl_Salary")
Rss("YingFa")=Rss("JB_Salary")+Rss("NG_Salary")+Rss("JS_Salary")+Rss("BuCha_Salary")+Rss("YX_Salary")+Rss("Gl_Salary")+Rss("Tx_Salary")+Rss("YeBan")+Rss("JiaBan")
Rss.Update
Rss.MoveNext
Wend
Rss.Close
Set Rss=Nothing



Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="Select * from gongzi where (leibie='劳务工' and bdepart='邮政配送局' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and iffa<>'b' and FalseDel<>'t') or (leibie<>'劳务工' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and iffa<>'b' and FalseDel<>'t')"
Rss.Open Sqls,conn,3,3

While Not Rss.Eof

Dim Num,lv,kou
Num=0 '每条记录清零
lv=0
kou=0

Set Rs=Server.CreateObject("Adodb.RecordSet")
Sql="Select SUM(KH_JJ) as JJ from JiangJinAll where name='"&Trim(Rss("Name"))&"' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and leibie<>'00'" '已改革_奖金
Rs.Open Sql,conn,1,1

If Rs.RecordCount>=1 Then
If Rs("JJ")>0 Then
JiangJin=Rs("JJ")
Else
JiangJin=0
End If
Else
JiangJin=0
End If

Num=Rss("yingfa") + JiangJin - Rss("Gl_Salary") - Rss("ZF_Accu") - Rss("YangLao_BX") - Rss("ShiYe_BX") - Rss("YiLiao_BX") - 1400
Tax_Num=Num

If Num<=0 Then
Num=0
lv=0.05
kou=0
End If
If Num>0 and Num<=500 Then
Num=Num*5/100
lv=0.05
kou=0
End If
If Num>500 and Num<=2000 Then
Num=Num*10/100-25
lv=0.1
kou=25
End If
If Num>2000 and Num<=5000 Then
Num=Num*15/100-125
lv=0.15
kou=125
End If
If Num>5000 and Num<=20000 Then
Num=Num*20/100-375
lv=0.2
kou=375
End If
If Num>20000 and Num<=40000 Then
Num=Num*25/100-1375
lv=0.25
kou=1375
End If
If Num>40000 and Num<=60000 Then
Num=Num*30/100-3375
lv=0.3
kou=3375
End If
If Num>60000 and Num<=80000 Then
Num=Num*35/100-6375
lv=0.35
kou=6375
End If
If Num>80000 and Num<=100000 Then
Num=Num*40/100-10375
lv=0.4
kou=10375
End If
If Num>100000 Then
Num=Num*45/100-15375
lv=0.45
kou=15375
End If

Rss("Gr_Tax")=FormatNumber(Num,2)
Rss("Tax_Num")=FormatNumber(Tax_Num,2)
Rss("Tax_Lv")=lv
Rss("Tax_Kou")=kou
Rss.Update

Rs.Close
Set Rs=Nothing

Rss.MoveNext
Wend

Rss.Close
Set Rss=Nothing

Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="Select * from gongzi where Bdepart='局领导' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"'"
Rss.Open Sqls,conn,3,3

While Not Rss.Eof
Rss("Gr_Tax")=0
Rss.MoveNext
Wend
Rss.Update
Rss.Close
Set Rss=Nothing


'############# 3、计完所得税后求实发数 不用加条件,类别为劳务工也要统计

Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="select * from gongzi where gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"'"
Rss.Open Sqls,conn,3,3

While Not Rss.Eof
Rss("XiaoJi3")=Rss("KaoQin")+Rss("Gr_Tax")+Rss("ZF_Accu")+Rss("YangLao_BX")+Rss("ShiYe_BX")+Rss("YiLiao_BX")+Rss("Other_Accu")+Rss("FangZu")
Rss("ShiFa")=FormatNumber(Rss("YingFa")-(Rss("KaoQin")+Rss("Gr_Tax")+Rss("ZF_Accu")+Rss("YangLao_BX")+Rss("ShiYe_BX")+Rss("YiLiao_BX")+Rss("Other_Accu")+Rss("FangZu")),2,-1,,0)
Rss.Update
Rss.MoveNext
Wend
Rss.Close
Set Rss=Nothing

'############# 检测 实发数<0 的情况给 提示!

Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="select * from gongzi where gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and shifa<0"
Rss.Open Sqls,conn,1,1
If Rss.RecordCount>0 Then
While Not Rss.EOf
Response.Write "<br>" & Rss("Name") & "的实发工资为:" & FormatNumber(Rss("ShiFa"),2,-1,,0)
Rss.MoveNext
Wend
%>
</body>
<script>
alert("请及时调整实发数为负数的数据才能生成税!");
window.close();
</script>
</html>
<%
Else
%>
</body>
<script>
alert("计算完毕!请选择菜单-->生成个人所得税!");
window.close();
</script>
</html>
<%
End If
Rss.Close
Set Rss=Nothing
%>
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
showfray 2005-12-23
  • 打赏
  • 举报
回复
还是不行呀,我试过都不符合我的要求,真的很急了,求以下小段的存储过程吧。


Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="Select * from gongzi Where gzmonth='12'"
Rss.Open Sqls,conn,3,3

While Not Rss.Eof

Dim Num,lv,kou
Num=0 '每条记录清零
lv=0
kou=0

Set Rs=Server.CreateObject("Adodb.RecordSet")
Sql="Select SUM(KH_JJ) as JJ from JiangJinAll where name='"&Trim(Rss("Name"))&"' and gzmonth='12'"
Rs.Open Sql,conn,1,1

If Rs.RecordCount>=1 Then
If Rs("JJ")>0 Then
JiangJin=Rs("JJ")
Else
JiangJin=0
End If
Else
JiangJin=0
End If

Num=Rss("yingfa") + JiangJin - Rss("Gl_Salary") - Rss("ZF_Accu") - Rss("YangLao_BX") - Rss("ShiYe_BX") - Rss("YiLiao_BX") - 1400
Tax_Num=Num

If Num<=0 Then
Num=0
lv=0.05
kou=0
End If
If Num>0 and Num<=500 Then
Num=Num*5/100
lv=0.05
kou=0
End If
If Num>500 and Num<=2000 Then
Num=Num*10/100-25
lv=0.1
kou=25
End If
If Num>2000 and Num<=5000 Then
Num=Num*15/100-125
lv=0.15
kou=125
End If
If Num>5000 and Num<=20000 Then
Num=Num*20/100-375
lv=0.2
kou=375
End If
If Num>20000 and Num<=40000 Then
Num=Num*25/100-1375
lv=0.25
kou=1375
End If
If Num>40000 and Num<=60000 Then
Num=Num*30/100-3375
lv=0.3
kou=3375
End If
If Num>60000 and Num<=80000 Then
Num=Num*35/100-6375
lv=0.35
kou=6375
End If
If Num>80000 and Num<=100000 Then
Num=Num*40/100-10375
lv=0.4
kou=10375
End If
If Num>100000 Then
Num=Num*45/100-15375
lv=0.45
kou=15375
End If

Rss("Gr_Tax")=FormatNumber(Num,2)
Rss("Tax_Num")=FormatNumber(Tax_Num,2)
Rss("Tax_Lv")=lv
Rss("Tax_Kou")=kou
Rss.Update

Rs.Close
Set Rs=Nothing

Rss.MoveNext
Wend

Rss.Close
Set Rss=Nothing
amandajj 2005-12-23
  • 打赏
  • 举报
回复
多参考一下 Sql Server查询分析器 帮助中的 Transact-SQL帮助 提供的例子
rawjim 2005-12-23
  • 打赏
  • 举报
回复
呵呵,鼓励一下。
我估计你需要一周的时间才能搞定。
遇到问题,记得首先在"Microsoft SQLServer"上按F1,中文的帮助文件,还是比较容易看的懂的。
另外提示一下,给变量赋值可以用Set也可以用Select.刚开始可能会不习惯,用几天就好了
lonaerd 2005-12-23
  • 打赏
  • 举报
回复
问题一:
在存储过程总要用游标对记录进行循环,查看一下游标的帮助就会明白。

问题二:

select b.* from b,a where bgzyear=A.gzyear and bgzmonth=A.gzmonth
showfray 2005-12-23
  • 打赏
  • 举报
回复
axianwoaini 2005-12-22
  • 打赏
  • 举报
回复
自己动手丰衣足食
dh20156 2005-12-22
  • 打赏
  • 举报
回复
自己去找个存储过程的例子,对照着自己尝试去写写试试看。
showfray 2005-12-22
  • 打赏
  • 举报
回复
那就主要是以下这一段先吧
Where 后的条件如果是变量的话先当变量传入吧。


Set Rss=Server.CreateObject("Adodb.RecordSet")
Sqls="Select * from gongzi where (leibie='劳务工' and bdepart='邮政配送局' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and iffa<>'b' and FalseDel<>'t') or (leibie<>'劳务工' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and iffa<>'b' and FalseDel<>'t')"
Rss.Open Sqls,conn,3,3

While Not Rss.Eof

Dim Num,lv,kou
Num=0 '每条记录清零
lv=0
kou=0

Set Rs=Server.CreateObject("Adodb.RecordSet")
Sql="Select SUM(KH_JJ) as JJ from JiangJinAll where name='"&Trim(Rss("Name"))&"' and gzmonth='"&CInt(Session("NowMonth"))&"' and gzyear='"&Session("NowYear")&"' and leibie<>'00'" '已改革_奖金
Rs.Open Sql,conn,1,1

If Rs.RecordCount>=1 Then
If Rs("JJ")>0 Then
JiangJin=Rs("JJ")
Else
JiangJin=0
End If
Else
JiangJin=0
End If

Num=Rss("yingfa") + JiangJin - Rss("Gl_Salary") - Rss("ZF_Accu") - Rss("YangLao_BX") - Rss("ShiYe_BX") - Rss("YiLiao_BX") - 1400
Tax_Num=Num

If Num<=0 Then
Num=0
lv=0.05
kou=0
End If
If Num>0 and Num<=500 Then
Num=Num*5/100
lv=0.05
kou=0
End If
If Num>500 and Num<=2000 Then
Num=Num*10/100-25
lv=0.1
kou=25
End If
If Num>2000 and Num<=5000 Then
Num=Num*15/100-125
lv=0.15
kou=125
End If
If Num>5000 and Num<=20000 Then
Num=Num*20/100-375
lv=0.2
kou=375
End If
If Num>20000 and Num<=40000 Then
Num=Num*25/100-1375
lv=0.25
kou=1375
End If
If Num>40000 and Num<=60000 Then
Num=Num*30/100-3375
lv=0.3
kou=3375
End If
If Num>60000 and Num<=80000 Then
Num=Num*35/100-6375
lv=0.35
kou=6375
End If
If Num>80000 and Num<=100000 Then
Num=Num*40/100-10375
lv=0.4
kou=10375
End If
If Num>100000 Then
Num=Num*45/100-15375
lv=0.45
kou=15375
End If

Rss("Gr_Tax")=FormatNumber(Num,2)
Rss("Tax_Num")=FormatNumber(Tax_Num,2)
Rss("Tax_Lv")=lv
Rss("Tax_Kou")=kou
Rss.Update

Rs.Close
Set Rs=Nothing

Rss.MoveNext
Wend

Rss.Close
Set Rss=Nothing
lonaerd 2005-12-22
  • 打赏
  • 举报
回复
存储过程很简单,但是你这么多代码写起来很费时间啊!
showfray 2005-12-22
  • 打赏
  • 举报
回复
不好意思,我想把上面实现的功能都写成存储过程。
其中上面的功能,是要从多个表中关联的,并且有判断条件
showfray 2005-12-22
  • 打赏
  • 举报
回复

谢谢大家先了,我还靠自己吧,不过要问两个问题:

-------------------------------------------------------

一、我想当select 后的记录集 not eof时,循环输出一个变量(并且回车换行),为何我如何试都没有输出的呢?

请帮忙解决。
我的存储代码

CREATE PROCEDURE Count_Tax
(
@GZYear char(4),
@GZMonth char(2)
)
AS
declare @test char(3)
while not exists (select * from gongzi where gzyear=@GZYear and gzmonth=@GZMonth )
begin
--set @test="abc"
--print @test
--print "ok" + "<br>"
--为何以上三行都不行?
end
GO


-----------------------------------------------------

二、如果我想从A表里查询出来的结果用来作为查询B表的条件,如何写这样的存储代码?

我的代码:

create proc test

select gzyear,gzmonth from A --A表的gzyear和gzmonth作为B表的条件

select * from B where gzyear=A.gzyear and gzmonth=A.gzmonth

此处where gzyear=A.gzyear and gzmonth=A.gzmonth 应该如何修改,是否要定义变量?
dh20156 2005-12-21
  • 打赏
  • 举报
回复
哪一段啊?Update那段?不要贴这么多出来嘛。 -_-!!!
showfray 2005-12-21
  • 打赏
  • 举报
回复
up

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧