问个存储过程的问题

Msconfig_001 2009-07-09 11:25:17
ALTER PROCEDURE dbo.gongzi_qry_rpt
@peoplename varchar(30),@deptname varchar(30),@moduser varchar(30),@Mouth varchar(30)
AS
if @peoplename is null
set @peoplename =''
if @deptname is null
set @deptname =''
if @mouth is null
set @mouth =''
if exists(select payday from vpay where payday = '日')
begin
select peoplename,peopleno,mouth,baoxian,deptname,jobs,workdays,payday,jbpay,overtime,weekdaytime,nightwork,leave,huoshi,jiangjin,zhusu,duofu,fading,zhuanru,
(fading+workdays)*jbpay as vjbpay,
(overtime*1.5+weekdaytime*2)*jbpay/8 as jiaban ,
(fading+workdays)*jbpay +(overtime*1.5+weekdaytime*2)*jbpay/8 as jiben,
inworkpay*(workdays+fading)/(workdays+fading+leave) as inworkpay,
((fading+workdays)*jbpay)+((overtime*1.5+weekdaytime*2)*jbpay/8)-(baoxian+huoshi+zhusu)+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru +nightwork as shiji,
((fading+workdays)*jbpay)+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru+duofu +((overtime*1.5+weekdaytime*2)*jbpay/8)-(baoxian+huoshi+zhusu)+nightwork as yinfa,
(baoxian+huoshi+zhusu) as koukuan
from vpay
where peoplename like '%'+ @peoplename +'%' and deptname like '%'+ @deptname +'%' and mouth like '%'+ @mouth +'%' order by id
end else
select peoplename,peopleno,mouth,baoxian,deptname,jobs,workdays,payday,jbpay,overtime,weekdaytime,nightwork,leave,huoshi,jiangjin,zhusu,duofu,fading,zhuanru,
(fading+workdays)*jbpay as vjbpay,
(overtime*1.5+weekdaytime*2)*jbpay/8 as jiaban ,
(fading+workdays)*jbpay +(overtime*1.5+weekdaytime*2)*jbpay/8 as jiben,
inworkpay*(workdays+fading)/(workdays+fading+leave) as inworkpay,
(fading+workdays)*jbpay+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru as shiji,
(fading+workdays)*jbpay+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru+duofu as yinfa,
(baoxian+huoshi+zhusu) as koukuan
from vpay
where peoplename like '%'+ @peoplename +'%' and deptname like '%'+ @deptname +'%' and mouth like '%'+ @mouth +'%' order by id

RETURN




为什么他只执行上面一条?
我查询数据里面有payday='月'的数据的!!!
...全文
73 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Msconfig_001 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ljhcy99 的回复:]
那就是只满足了

if exists(select payday from vpay where payday = '日')
条件/
[/Quote]

里面有数据.为什么会只满足一个条件呢?

而且另一个条件也是采用第一条SELECT执行的!
Msconfig_001 2009-07-09
  • 打赏
  • 举报
回复
我执行出来的结果是,不论你是月还是日,都是按照第一条SELECT执行!!
是不是第二条有错?他不执行?但是payday是月啊.为什么还是按照第一条执行?

奇怪!!!
Msconfig_001 2009-07-09
  • 打赏
  • 举报
回复
但是我里面有数据啊!~

以前都没这问题.奇怪...
ljhcy99 2009-07-09
  • 打赏
  • 举报
回复
那就是只满足了

if exists(select payday from vpay where payday = '日')
条件/
yangshenghong 2009-07-09
  • 打赏
  • 举报
回复

ALTER PROCEDURE dbo.gongzi_qry_rpt
@peoplename varchar(30),@deptname varchar(30),@moduser varchar(30),@Mouth varchar(30)
AS
if @peoplename is null
set @peoplename =''
if @deptname is null
set @deptname =''
if @mouth is null
set @mouth =''
if exists(select payday from vpay where payday = '日')
begin
select peoplename,peopleno,mouth,baoxian,deptname,jobs,workdays,payday,jbpay,overtime,weekdaytime,nightwork,leave,huoshi,jiangjin,zhusu,duofu,fading,zhuanru,
(fading+workdays)*jbpay as vjbpay,
(overtime*1.5+weekdaytime*2)*jbpay/8 as jiaban ,
(fading+workdays)*jbpay +(overtime*1.5+weekdaytime*2)*jbpay/8 as jiben,
inworkpay*(workdays+fading)/(workdays+fading+leave) as inworkpay,
((fading+workdays)*jbpay)+((overtime*1.5+weekdaytime*2)*jbpay/8)-(baoxian+huoshi+zhusu)+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru +nightwork as shiji,
((fading+workdays)*jbpay)+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru+duofu +((overtime*1.5+weekdaytime*2)*jbpay/8)-(baoxian+huoshi+zhusu)+nightwork as yinfa,
(baoxian+huoshi+zhusu) as koukuan
from vpay
where peoplename like '%'+ @peoplename +'%' and deptname like '%'+ @deptname +'%' and mouth like '%'+ @mouth +'%' order by id
end
else
begin
select peoplename,peopleno,mouth,baoxian,deptname,jobs,workdays,payday,jbpay,overtime,weekdaytime,nightwork,leave,huoshi,jiangjin,zhusu,duofu,fading,zhuanru,
(fading+workdays)*jbpay as vjbpay,
(overtime*1.5+weekdaytime*2)*jbpay/8 as jiaban ,
(fading+workdays)*jbpay +(overtime*1.5+weekdaytime*2)*jbpay/8 as jiben,
inworkpay*(workdays+fading)/(workdays+fading+leave) as inworkpay,
(fading+workdays)*jbpay+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru as shiji,
(fading+workdays)*jbpay+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru+duofu as yinfa,
(baoxian+huoshi+zhusu) as koukuan
from vpay
where peoplename like '%'+ @peoplename +'%' and deptname like '%'+ @deptname +'%' and mouth like '%'+ @mouth +'%' order by id
end
RETURN



allen_sz 2009-07-09
  • 打赏
  • 举报
回复
SQL语句没有细看,不过你这里首先有个问题是当你的语句中有对汉字进行比较,应当使用nvarchar的方式;其次你用一条可能得出记录集的语句与一个字符串比较,返回多行怎么办?比如这句
select payday from vpay where payday = '日'

最好写成
select top 1 payday from vpay where payday = N'日'

,避免我上面提到的两个问题
Msconfig_001 2009-07-09
  • 打赏
  • 举报
回复
也是不行!!!
吖..搞不明白啊.分析是没错的!~
ljhcy99 2009-07-09
  • 打赏
  • 举报
回复
if exists(select payday from vpay where payday = '日')
begin
select peoplename,peopleno,mouth,baoxian,deptname,jobs,workdays,payday,jbpay,overtime,weekdaytime,nightwork,leave,huoshi,jiangjin,zhusu,duofu,fading,zhuanru,
(fading+workdays)*jbpay as vjbpay,
(overtime*1.5+weekdaytime*2)*jbpay/8 as jiaban ,
(fading+workdays)*jbpay +(overtime*1.5+weekdaytime*2)*jbpay/8 as jiben,
inworkpay*(workdays+fading)/(workdays+fading+leave) as inworkpay,
((fading+workdays)*jbpay)+((overtime*1.5+weekdaytime*2)*jbpay/8)-(baoxian+huoshi+zhusu)+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru +nightwork as shiji,
((fading+workdays)*jbpay)+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru+duofu +((overtime*1.5+weekdaytime*2)*jbpay/8)-(baoxian+huoshi+zhusu)+nightwork as yinfa,
(baoxian+huoshi+zhusu) as koukuan
from vpay
where peoplename like '%'+ @peoplename +'%' and deptname like '%'+ @deptname +'%' and mouth like '%'+ @mouth +'%' order by id
end
if exists(select payday from vpay where payday = '月')
begin
select peoplename,peopleno,mouth,baoxian,deptname,jobs,workdays,payday,jbpay,overtime,weekdaytime,nightwork,leave,huoshi,jiangjin,zhusu,duofu,fading,zhuanru,
(fading+workdays)*jbpay as vjbpay,
(overtime*1.5+weekdaytime*2)*jbpay/8 as jiaban ,
(fading+workdays)*jbpay +(overtime*1.5+weekdaytime*2)*jbpay/8 as jiben,
inworkpay*(workdays+fading)/(workdays+fading+leave) as inworkpay,
(fading+workdays)*jbpay+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru as shiji,
(fading+workdays)*jbpay+(inworkpay*(workdays+fading)/(workdays+fading+leave))+jiangjin-zhuanru+duofu as yinfa,
(baoxian+huoshi+zhusu) as koukuan
from vpay
where peoplename like '%'+ @peoplename +'%' and deptname like '%'+ @deptname +'%' and mouth like '%'+ @mouth +'%' order by id
end
看看

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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