sqlserver 2005 自定义函数的问题

平台报表存储过程的开发,需要根据数据字典给定的特定字母进行查找。这样需要写很多字符串,假如遇到增加计费类型就得到处改存储过程中的字符串。

[b]想法:[/b]

为了方便,我把需要修改的字符串定义成一个函数这样只要在存储过程里调用函数即可。
将来扩展也不需要修改其他的存储过程,只要修改方法就可以了。
[b]步骤:[/b]

1.创建函数
我创建标量值函数 getTypeCode
返回指定的字符串


create function getTypeCode()
returns varchar(20)
as
begin
declare @str varchar (20)
set @str = '"A"' + ',' + '"C"'
set @str = replace(@str,'"','''')
return @str
end


2.调用函数查找数据

[img]http://dl.iteye.com/upload/attachment/0067/1438/448c177e-1e7c-3da6-bd35-1e6e2813b055.bmp[/img]

[color=red]没有达到我预期的结果根据函数返回值没有找到数据库中的记录[/color]

这是什么回事了呢?

[b]猜想:[/b]

select 中的 in 是不是直接把函数返回值当成一个字符了?
于是自己收入修改一下typeCode,验证自己的想法

[img]http://dl.iteye.com/upload/attachment/0067/1440/307db42d-529b-3178-9faa-71cb599ba648.bmp[/img]

[color=red]如图所示恰好验证了我的想法[/color]


这时候想是不是函数用法不对?在网上找了方法,用另外一种自定义函数[color=darkblue][url=http://baike.baidu.com/view/4935315.htm]表值函数[/url][/color]
创建函数


create function getIncomeCode()
returns table
as
return select typeCode from hzfaq_fee_data where typeCode in ('A','C');



这样的查询结果恰好是我想要的结果

如图所示:


[img]http://dl.iteye.com/upload/attachment/0067/1445/6f941cfd-fce2-3c89-9f7b-8b6ca00b5025.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值