[sqlserver]sql编程2-标量值函数的使用和示例

接着 游标的使用和示例 文章继续,这篇文章主要讲sqlserver中的 标量值函数的使用和示例代码

需求说明

如下图是明细表中的所有数据,目标结果是FeeID为53的所有 的 交通费 组成的结果。

sqlserver标量值函数示例代码

目标结果:

sqlserver标量值函数调用结果

标量值函数的使用

标量值函数可以传入一些参数,然后进行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的使用等。很多细节组成了这么一个强大的功能。

有了这个标量值函数,就可以在以后创建视图啊,存储过程中啊,函数中啊,都可以调用该函数来取得 交通费用明细。下一篇我们说 视图的创建。

分享到:更多 ()

3

评论前必须登录!

 

  1. #2

    What’s up, all is going well here and ofcourse every one is sharing facts, that’s actually good, keep up writing.

  2. #1

    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.