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

tech2025-02-25  22

    标量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')

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

最新回复(0)