sql server 2008表值函数的使用

场景:输入片区号,查询该片区的所有用户最后一次的消费记录。
有两张表:用户信息、流水账。

如果用传统方法查:
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')



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值