目的:你们公司所销售的产品遵从基于产品类别的变化税率。一些产品,比如饮料是高税率产品,而像佐料这样的产品是免税。你决定建立一个用户自定义函数来封装这个收税的逻辑。这个用户自定义函数为管理税率与简化必须重复的逻辑部分提供了一个中心场所。
    创建一个名称为fn_TaxRate的标量用户自定义函数,该函数封装了CASE语句,它接受一个参数@ProdID int并返回一个numeric(5,4)数据类型的值。
 
l  测试函数
 
在本过程中,用从产品表中选择列的方法来测试你刚才创建的函数。
执行下面的SELECT语句,从产品表中选择ProductName,UnitPrice,CategoryID,TaxRate以及一个计算值PriceWithTax。
 
select productname,unitprice,categoryid,dbo.fn_taxrate(productid) as taxrate,
unitprice*dbo.fn_taxrate(productid) as pricewithtax from products
 
TaxRate 列对每个产品都应该包含这样的值:1.00或者1.05或者1.10。
PriceWithTax列应该包含TaxRate列与UnitPrice列的乘积。
代码:
USE Northwind
GO
CREATE FUNCTION fn_TaxRate
   (@ProdID INT)
RETURNS numeric(5,4)
AS
BEGIN
RETURN
(SELECT
   CASE CategoryID
      WHEN 1 THEN 1.10
      WHEN 2 THEN 1
      WHEN 3 THEN 1.10
      WHEN 4 THEN 1.05
      WHEN 5 THEN 1
      WHEN 6 THEN 1.05
      WHEN 7 THEN 1
      WHEN 8 THEN 1.05
   END
FROM Products 
WHERE ProductID = @ProdID)
END
GO

SELECT ProductName, UnitPrice, CategoryID, Northwind.dbo.fn_TaxRate(ProductID) AS TaxRate,
UnitPrice * Northwind.dbo.fn_TaxRate(ProductID) AS PriceWithTax FROM Products