在表值函数中能否将字符串表示的条件转换为数值表达式条件

Colorado 2008-06-17 08:08:32
例:程序传入getSalary('2008.06','deptid=1 or deptid=2 or deptid<>3')
表值函数
ALTER FUNCTION GetSalary
(
@ThisMonth char(7)
@Condition varchar(1000)
)
RETURNS TABLE AS
RETURN (
SELECT *
from wage
where month=ThisMonth and <--- 这里要加入条件,但应该变为
deptid=1 or deptid=2 or deptid<>3
应该怎么做呢?

由于程序是动态产生条件,所以不能将条件写死在where子句中。



...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Colorado 2008-06-17
  • 打赏
  • 举报
回复
上面的过程写得有错,但意思表达清楚了,见谅。
Colorado 2008-06-17
  • 打赏
  • 举报
回复
存储过程怎么办呢?要这样吗?

ALTER PROCEDURE [dbo].[GetSumSalary-noused]
@ThisMonth char(7)='',
@Condition varchar(1000)=''
AS

declare @mysql varchar(3000)
@mysql ='
select sum(..),sum(....)
from wage a join employee b on a.id = b.id
where month = @ThisMonth and '+@condition
exec @mysql

这个方法,我感觉可行,但我觉得,如果这样的话,存储过程没法事先编译,存储过程是不能优化的。
在数据量很大的统计中是否很影响性能?



nzperfect 2008-06-17
  • 打赏
  • 举报
回复
实现不了,想别的思路
wzy_love_sly 2008-06-17
  • 打赏
  • 举报
回复
那没办法,函数不支持exec,只能改用过程了
Colorado 2008-06-17
  • 打赏
  • 举报
回复
我忘了,我的表述可能不太准确,应该是这样:

GetSalary函数返回是表wage的汇总值,
传入参数:@ThisMonth char(7)
@Condition varchar(1000)
主要语句:
SELECT sum(basic_wage),sum(float_wage)....
from wage a join employee b on a.id = b.id
where month=ThisMonth and deptid=1 or deptid=2 or deptid <>3这个条件也可以是空

调用过程:
select *
from getSalary('2008.06','deptid=1 or deptid=2 or deptid <>3')

如果我把条件写在程序里,那么表值函数没有办法约束汇总条件,该如何是好?
select *
from getSalary('2008.06')
where deptid=1 or deptid=2 or deptid <>3
这样子,肯定是出错的,因为select中没有deptid,








wzy_love_sly 2008-06-17
  • 打赏
  • 举报
回复
只传参数,把条件写函数里面吧

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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