欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sqlserver 2005 自定义函数的问题

程序员文章站 2024-02-22 23:28:16
...
平台报表存储过程的开发,需要根据数据字典给定的特定字母进行查找。这样需要写很多字符串,假如遇到增加计费类型就得到处改存储过程中的字符串。

[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]
相关标签: sqlserver 2005