接着 游标的使用和示例 文章继续,这篇文章主要讲sqlserver中的 标量值函数的使用和示例代码。
需求说明
如下图是明细表中的所有数据,目标结果是FeeID为53的所有 的 交通费 组成的结果。
目标结果:
标量值函数的使用
标量值函数可以传入一些参数,然后进行sql处理,返回某种特定的数据。下面我们就来使用标量函数,来得到一个具体主表某行数据的对应的所有总和起来的明细信息。
本例代码:
-- ============================================= -- Author: tmac -- Create date: 2015-11-26 14:45:19 -- Description: 获取某销售员某条报销单 的 所有 交通费 -- ============================================= CREATE FUNCTION [dbo].[Fun_GetJiaoTongFeeByFeeID] ( @FeeID INT ) RETURNS NVARCHAR(1000) AS BEGIN DECLARE @Res NVARCHAR(1000) SET @Res='' DECLARE @count INT SET @count=(SELECT COUNT(ID) FROM dbo.DayPlan_Routes WHERE FeeID=@FeeID) IF @count>0 BEGIN DECLARE @fee FLOAT DECLARE @startPlace NVARCHAR(50) DECLARE @endPlace NVARCHAR(50) DECLARE @feeType NVARCHAR(50) DECLARE @feeNum INT --游标:循环读取本ID的所有 报销单据 信息 DECLARE cur_Fee CURSOR FOR SELECT startplace,endplace,fee,feeType,FeeNum FROM dbo.DayPlan_Routes WHERE feeid=@FeeID AND FeeType='交通费' OPEN cur_Fee FETCH NEXT FROM cur_Fee INTO @startPlace,@endPlace,@fee,@feeType,@feeNum WHILE (@@Fetch_Status=0) BEGIN SET @Res=@Res+@startPlace+'-'+CAST(@fee AS NVARCHAR(50))+'-'+@endPlace+' / ' --SET @Res=@Res+@startPlace FETCH NEXT FROM cur_Fee INTO @startPlace,@endPlace,@fee,@feeType,@feeNum END CLOSE cur_Fee DEALLOCATE cur_Fee IF(LEN(@Res)>0) SET @Res=SUBSTRING(@Res,0,LEN(@Res)-1) END ELSE BEGIN SET @Res='' END RETURN @Res END
调用代码:
SELECT dbo.Fun_GetJiaoTongFeeByFeeID(53) AS jiaotong;
总结
这篇文章主要讲了sqlserver中标量值函数的使用方法,可以看出,很多知识点都是穿插一起的,像变量的声明,游标的使用,IF的使用等。很多细节组成了这么一个强大的功能。
有了这个标量值函数,就可以在以后创建视图啊,存储过程中啊,函数中啊,都可以调用该函数来取得 交通费用明细。下一篇我们说 视图的创建。
What’s up, all is going well here and ofcourse every one is sharing facts, that’s actually good, keep up writing.
Thank you for your support!
Heya i’m for the first time here. I found this board and I find It truly useful & it helped me out much. I hope to give something back and aid others like you aided me.