数据库原理与应用(SQL Server)笔记 第十章 用户定义函数
目錄
- 前言
- 一、用戶定義函數的定義
- 二、用戶定義函數的分類
- 三、標量函數和內聯表值函數
- (一)標量函數的定義
- (二)標量函數的調用
- 1、SELECT語句調用
- 2、EXEC語句調用
 
- (三)內聯表值函數的定義
- (四)內聯表值函數的調用
 
- 四、多語句表值函數
- (一)多語句表值函數的定義
- (二)多語句表值函數的調用
 
- 五、用戶定義函數的刪除
- 結語
前言
本章內容將介紹數據庫用戶自定義T-SQL函數,以及其定義和調用。
一、用戶定義函數的定義
用戶定義函數,即是用戶根據自己需要所定義的函數,它有允許模塊化程序設計、執行速度快、減少網絡流量等特點。創建好的用戶定義函數可在當前數據庫——可編程性——函數中找到,如下圖:
 
二、用戶定義函數的分類
用戶定義函數分為兩類,為內聯表值函數和多語句表值函數。
三、標量函數和內聯表值函數
內聯表值函數是在RETURN 子句中包含單個SELECT語句。
(一)標量函數的定義
標量函數返回在RETURNS 子句中定義的類型的單個數據值,即返回單個數據值。
 格式如下:
(二)標量函數的調用
1、SELECT語句調用
格式如下:
 架構名.函數名(實參1,實參2,...,實參n)
2、EXEC語句調用
格式如下:
 EXEC變量名=架構名.函數名 實參1,實參2,...,實參n或
 EXEC變量名=架構名.函數名 形參名1=實參1,...,形參名2=實參2,...,形參名n=實參n
例1、根據商品信息表,定義一個標量函數F_Sales,其功能是:輸入商品的ID號,根據ID號返回該商品的價格。
 sql語句
 創建函數:
 CREATE FUNCTION F_Sales(@ProductID char(6)) RETURNS int AS BEGIN DECLARE @Price int SELECT @Price=Price FROM Product WHERE ProductID=@ProductID RETURN @Price END
 用SELECT語句調用函數(查詢ID為P01001的商品價格):
 USE Sales DECLARE @ProductID char(6) DECLARE @Price int SELECT @ProductID='P01001' SELECT @Price=dbo.F_Sales(@ProductID) SELECT @Price AS '商品價格'
 這里當然也可以使用EXEC語句來調用函數即改為,結果也是一樣的(查詢ID為P01001的商品價格):
 USE Sales DECLARE @ProductID char(6) DECLARE @Price int EXEC @Price=dbo.F_Sales @ProductID='P01001' SELECT @Price AS '商品價格'
 
(三)內聯表值函數的定義
標量函數只返回單個標量值,而對于內聯表值函數返回表值(結果集)。
 格式如下:
(四)內聯表值函數的調用
這里要注意,內聯表值函數的調用與標量函數的調用不一樣,它只能通過SELECT語句來調用,而且在調用時可以只使用函數的名稱。
例2、根據商品信息表,定義一個內聯表值函數F_Sales1,其功能是:輸入商品的ID號,根據ID號查詢該商品的商品名稱、商品價格和商品的庫存量。
 
 sql語句
 創建函數:
 CREATE FUNCTION F_Sales1(@ProductID char(6)) RETURNS TABLE AS RETURN ( SELECT ProductName,Price,Stocks FROM Product WHERE @ProductID=ProductID
 用SELECT語句調用函數(查詢ID為P01001的商品名稱、商品價格和商品的庫存量):
 USE Sales SELECT *FROM F_Sales1('P01001')
 
四、多語句表值函數
(一)多語句表值函數的定義
多語句表值函數和內聯表值函數都返回表值。這里要說明一下它們的區別:
 對于內聯表值函數,它不需要定義返回表的類型,其返回表是由單個T-SQL語句的結果集,不需要用BEGIN...END語句分隔。
 對于多語句標量函數,它需要定義返回表的類型,其返回表是由多個T-SQL語句的結果集,其BEGIN...END語句中包含多個T-SQL語句。
 格式如下:
(二)多語句表值函數的調用
多語句表值函數的調用與內聯表值函數的調用一樣,它也是只能通過SELECT語句來調用,而且在調用時可以只使用函數的名稱。
例3、根據商品信息表,定義一個多語句表值函數F_Sales2,其功能是:輸入商品的ID號,根據ID號查詢該商品的商品名稱、商品分類、商品價格和商品的庫存量。
 
 sql語句
創建函數:
 CREATE FUNCTION F_Sales2(@ProductID char(6)) RETURNS @ProductInfo TABLE ( PName varchar(30), CID int, Pr money, St smallint ) AS BEGIN INSERT @ProductInfo SELECT ProductName,CategoryID,Price,Stocks FROM Product WHERE @ProductID=ProductID RETURN END
 用SELECT語句調用函數(查詢ID為P03001的商品名稱、商品分類、商品價格和商品的庫存量):
 USE Sales SELECT * FROM F_Sales2('P03001')
 
五、用戶定義函數的刪除
我們可以通過對象資源管理器刪除所定義的函數,如下圖:
 
 也可以通過T-SQL語句進行刪除,可一次刪除一個或者多個函數,格式如下:
結語
以上就是本次數據庫原理與應用的全部內容,篇幅較長,感謝您的閱讀和支持,若有表述或代碼中有不當之處,望指出!您的指出和建議能給作者帶來很大的動力!!!
總結
以上是生活随笔為你收集整理的数据库原理与应用(SQL Server)笔记 第十章 用户定义函数的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 数据库原理与应用(SQL Server)
- 下一篇: 数据库原理与应用(SQL Server)
