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