求高手解决,在SqlServer2000数据库中编写自定义函数,表名为employee,收入的字段名为esalary

编写函数,收入小于1000的显示“低收入”,1000……2000的“中低收入”,2000……5000为“中等收入”,5000……8000“中高收入”,8000以上的“高收... 编写函数,收入小于1000的显示“低收入”,1000……2000的“中低收入”,2000……5000为“中等收入”,5000……8000“中高收入”,8000以上的“高收入”。 展开
 我来答
dhr2001
2012-06-01 · TA获得超过542个赞
知道小有建树答主
回答量:266
采纳率:83%
帮助的人:152万
展开全部
这个要用游标
declare @a int
declare my_cursor cursor for select esalary from employee --定义游标
open my_cursor --打开游标
fetch next from my_cursor into @a /*游标向下移动,游标初值指向表头,向下移动指向第一条记录*/
while @@fetch_statcs = 0 --游标未指向最后一条,则循环
begin
if @a<1000 print '低收入' --这里是条件,与其他语言的用法一样
else if @a<2000 print '中的收入'
else if @a<5000 print '中等收入'
else if @a<8000 print '中高收入'
else print '高收入'
end
close my_cursor --关闭游标
deallocate my_cursor --释放游标

/*游标类似C语言的指针,需要先定义,然后打开,使用游标,最后要关闭和释放游标以防止内存泄漏,@@fetch_status是一个全局变量,用来检测游标状态,返回0时说明读取成功,返回1时说明读取失败,返回2时读取出现意外,执行多条语句时要用begin...end框起来,类似其他语言的花括号,if语句用法与其他语言一样*/
追问
不用游标不行吗?
追答
不用游标的话,只能通过自定义函数或存储过程来传递一个参数,返回该参数对应的收入属于高收入还是低收入。不会返回整张表的收入高低。

这样的话,传递的参数应该是员工号之类的。例如输入员工号,判断改员工的收入属于高收入还是低收入或中收入。现在假设员工号为eid int,因为只要返回一个值,所以用标量函数来做。

create function dbo.my_function(@eid int) /*定义函数dbo.my_function,通过eid传递一个参数给函数*/
return varchar(20) --返回一个字符串
as
begin --函数的主体部分,多语句,用begin..end框在一起
declare @b int ,@c varchar(20) /*定义一个变量b存放esalary的值,定义一个变量c存放返回字符的值*/
set @b=(select esalary from employee where eid=@eid) --通过select 给b赋值
if @b<1000 set @c='低收入' --根据b的值,给c赋值
else if @b<2000 set @c='中低收入'
else if @b<5000 set @c='中等收入'
else if @b<8000 set @c='中高收入'
else set @c='高收入'
return @c --返回c的值
end

调用该函数方法:select dbo.my_function(1) --括号中为要传递给函数的eid的值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式