SqlServer2008实例58UDF之维护可重用的代码

    标量UDF可以把逻辑封装到一个函数中,而不是在每次需要的时候多次重复逻辑,从而减少代码膨胀。
    例如,下面的标量用户定义函数用于决定雇员可以拿到的电脑类型。有好几行代码来计算不同的输入参数,包括雇员的头衔、雇员的雇用日期以及是否领薪水.可以将这些逻辑封装到一个函数中,而不是在数据库中的多个地方重复这段逻辑:

USE AdventureWorks
GO

CREATE FUNCTION dbo.udf_GET_AssignedEquipment
(@Title nvarchar(50),@HireDate datetime,@SalariedFlag bit)
RETURNS nvarchar(50)
AS
BEGIN
	DECLARE @EquipmentType nvarchar(50)
	IF @Title LIKE 'Chief%' OR
	   @Title LIKE 'Vice%' OR
	   @Title='Database Administrator'
	BEGIN
		SET @EquipmentType='PC Build A'
	END

	IF @EquipmentType IS NULL AND @SalariedFlag=1
	BEGIN
		SET @EquipmentType='PC Build B'
	END	

	IF @EquipmentType IS NULL AND @HireDate<'1/1/2002'
	BEGIN
		SET @EquipmentType='PC Build C'
	END

	IF @EquipmentType IS NULL
	BEGIN
		SET @EquipmentType='PC Build D'
	END

	RETURN @EquipmentType
END

GO

   可以在T-SQL代码中的很多地方使用这个标量函数,而不需要重新编码这些逻辑。

  示例1,在查询的SELECT、GROUP BY和ORDER BY子句中使用新的标量函数;

USE AdventureWorks
GO

SELECT dbo.udf_GET_AssignedEquipment
	(Title,HireDate,SalariedFlag) PC_Build,
	COUNT(*) Employee_COUNT
FROM HumanResources.Employee
GROUP BY dbo.udf_GET_AssignedEquipment
	(Title,HireDate,SalariedFlag) 	
ORDER BY dbo.udf_GET_AssignedEquipment
	(Title,HireDate,SalariedFlag)	

示例2:在SELECT和WHERE子句中使用这个标量函数:

USE AdventureWorks
GO

SELECT Title,ContactID,
	   dbo.udf_GET_AssignedEquipment
		(Title,HireDate,SalariedFlag) PC_Build
FROM HumanResources.Employee
WHERE dbo.udf_GET_AssignedEquipment
		(Title,HireDate,SalariedFlag) 
	  IN ('PC Build A','PC Build B')

    标量用户定义函数能帮助封装业务逻辑,这样就不需要在代码测重复,提供了集中的地方,使得要修改的时候只需要对一个函数修改就可以了。这还提供了一致性,你和其他数据库开发者能一直以相同方式使用和编写相同的逻辑.此外,还有一个优势就是代码可读性,特别是对于执行多个查找或计算的大型查询。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值