求高手解决,在SqlServer2000数据库中编写自定义函数,表名为employee,收入的字段名为esalary
编写函数,收入小于1000的显示“低收入”,1000……2000的“中低收入”,2000……5000为“中等收入”,5000……8000“中高收入”,8000以上的“高收...
编写函数,收入小于1000的显示“低收入”,1000……2000的“中低收入”,2000……5000为“中等收入”,5000……8000“中高收入”,8000以上的“高收入”。
展开
1个回答
展开全部
这个要用游标
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语句用法与其他语言一样*/
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的值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询