--用戶定義函數的分類: /* 1.標量函數 2.表值函數 2.1內聯表值函數 返回單個SELECT語句, 它沒有相關的返回變數和函數體 2.2多語句表值函數 是視圖和存儲過程的結合 可嵌套 */ 執行: 結果: 執行: 結果: 多語句表值函數 執行: 結果: ...
--用戶定義函數的分類:
/*
1.標量函數
2.表值函數
2.1內聯表值函數 返回單個SELECT語句, 它沒有相關的返回變數和函數體
2.2多語句表值函數 是視圖和存儲過程的結合 可嵌套
*/
標量函數
--標量函數 IF EXISTS(SELECT * FROM sysobjects WHERE name='fun_SeeEverySortAmount') DROP FUNCTION fun_SeeEverySortAmount GO CREATE FUNCTION fun_SeeEverySortAmount(@class varchar(20)) RETURNS INT AS BEGIN DECLARE @Amount int SELECT @Amount=Amount FROM CommoditySort C INNER JOIN CommodityInfo I ON C.SortId=I.SortId WHERE I.CommodityName=@class RETURN @Amount END GO
執行:
--執行 DECLARE @Amount int EXEC @Amount= fun_SeeEverySortAmount '蘋果iPhone6' PRINT '蘋果iPhone6的庫存量為:'+CONVERT(varchar(20),@Amount)
結果:
內聯表值函數
--內聯表值函數 返回單個SELECT語句, 它沒有相關的返回變數和函數體 IF EXISTS (SELECT * FROM sysobjects WHERE name='fun_inlineSeeEverySortAmount') DROP FUNCTION fun_inlineSeeEverySortAmount GO CREATE FUNCTION fun_inlineSeeEverySortAmount(@class varchar(20)) RETURNS table AS RETURN ( SELECT Amount FROM CommodityInfo I WHERE I.CommodityName=@class ) GO
執行:
--執行 調用內聯函數和視圖的使用一樣 SELECT Amount 數量 FROM fun_inlineSeeEverySortAmount('蘋果iPhone6')
結果:
多語句表值函數
--多語句表值函數 是視圖和存儲過程的結合 可嵌套 --如果一件商品的銷售數量超過3000則為銷量品,1000-3000為一般商品,0-1000 為需要促銷 IF EXISTS (SELECT * FROM sysobjects WHERE name='fun_MutilateStatementSalesSort') DROP FUNCTION fun_MutilateStatementSalesSort GO CREATE FUNCTION fun_MutilateStatementSalesSort(@class varchar(20)) RETURNS @salessort table( 商品名 varchar(20), 單價 money, 商品類型 varchar(20), 銷售量 int, 商品銷售類型 varchar(20) ) AS BEGIN INSERT INTO @salessort SELECT I.CommodityName,I.InPrice,S.SortName,SUM(O.Amount),CASE WHEN SUM(O.Amount)>3000 THEN '銷量品' WHEN SUM(O.Amount) BETWEEN 1000 AND 3000 THEN '一般商品' WHEN SUM(O.Amount) BETWEEN 0 AND 1000 THEN '需要促銷' END FROM CommodityInfo I INNER JOIN CommoditySort S ON I.SortId=S.SortId INNER JOIN OrderInfo O ON O.CommodityId =I.CommodityId WHERE I.CommodityName=@class GROUP BY I.CommodityName,I.InPrice,S.SortName RETURN END GO
執行:
--執行 它相當於一個表 SELECT* FROM fun_MutilateStatementSalesSort('蘋果MD760') SELECT* FROM fun_MutilateStatementSalesSort('尼康D3300') SELECT* FROM fun_MutilateStatementSalesSort('小米平板')
結果: