sql server 2008表值函数的使用

时间:2022-01-18 00:54:22
场景:输入片区号,查询该片区的所有用户最后一次的消费记录。
有两张表:用户信息、流水账。

如果用传统方法查:
1.查询该地区所有的人。
2.循环查询出每个人最后一次的消费记录

问题:数据连接次数=人数+1次,由于数据连接断开是很耗数据库资源也很耗时,次数过多会导致数据库崩溃。所以这里就要用到自定义表值函数,将片区号传入后数据库直接返回所有用户的最后一条记录。

create function [dbo].[findFlow](@code varchar(10))
--定义返回表类型
returns @flow table(
MeterId varchar(12),
code varchar(5),
TimeAccount datetime
)
begin
--定义变量
declare @MeterID varchar(12);

declare @co varchar(10);

--查询片区所有人
declare us cursor for (select MeterID,CCodeNO from MeterInfo m where m.CCodeNO=@code);

open us --打开游标


fetch next from us into @MeterID,@co --取下一条记录

while @@FETCH_STATUS=0 -- 循环查询所有人最后一条消费记录
begin
--取出最后一记录,将值插入返回表中
insert into @flow
select top(1) MeterID,@co as code,TimeAccount
from AccountFlow a
where a.MeterID=@MeterID
order by a.TimeAccount desc

fetch next from us into @MeterID,@co --取下一条记录
end

close us --关闭游标
deallocate us --释放游标
return
end

--调用 select * from dbo.findFlow('111')