日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库原理与应用(SQL Server)笔记 第十章 用户定义函数

發布時間:2024/2/28 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库原理与应用(SQL Server)笔记 第十章 用户定义函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前言
  • 一、用戶定義函數的定義
  • 二、用戶定義函數的分類
  • 三、標量函數和內聯表值函數
    • (一)標量函數的定義
    • (二)標量函數的調用
      • 1、SELECT語句調用
      • 2、EXEC語句調用
    • (三)內聯表值函數的定義
    • (四)內聯表值函數的調用
  • 四、多語句表值函數
    • (一)多語句表值函數的定義
    • (二)多語句表值函數的調用
  • 五、用戶定義函數的刪除
  • 結語


前言

本章內容將介紹數據庫用戶自定義T-SQL函數,以及其定義和調用。

一、用戶定義函數的定義

用戶定義函數,即是用戶根據自己需要所定義的函數,它有允許模塊化程序設計、執行速度快、減少網絡流量等特點。創建好的用戶定義函數可在當前數據庫——可編程性——函數中找到,如下圖:

二、用戶定義函數的分類

用戶定義函數分為兩類,為內聯表值函數和多語句表值函數。

三、標量函數和內聯表值函數

內聯表值函數是在RETURN 子句中包含單個SELECT語句。

(一)標量函數的定義

標量函數返回在RETURNS 子句中定義的類型的單個數據值,即返回單個數據值。
格式如下:

CREATE FUNCTION <函數名>(@參數的名稱 類型) RETURNS <返回參數的類型> ASBEGIN<函數體(SQL語句)>RETURN <返回值>END ; ...

(二)標量函數的調用

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 '商品價格'

(三)內聯表值函數的定義

標量函數只返回單個標量值,而對于內聯表值函數返回表值(結果集)。
格式如下:

CREATE FUNCTION <函數名>(@參數的名稱 類型) RETURNS TABLE AS RETURN (<SQL語句> ) ; ...

(四)內聯表值函數的調用

這里要注意,內聯表值函數的調用與標量函數的調用不一樣,它只能通過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語句。
格式如下:

CREATE FUNCTION <函數名>(@參數的名稱 類型) RETURNS <@返回表的名稱> TABLE<列屬性>AS BEGIN<函數體(SQL語句)>RETURN END ; ...

(二)多語句表值函數的調用

多語句表值函數的調用與內聯表值函數的調用一樣,它也是只能通過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語句進行刪除,可一次刪除一個或者多個函數,格式如下:

DROP FUNCTION <函數的名稱>...

結語

以上就是本次數據庫原理與應用的全部內容,篇幅較長,感謝您的閱讀和支持,若有表述或代碼中有不當之處,望指出!您的指出和建議能給作者帶來很大的動力!!!

總結

以上是生活随笔為你收集整理的数据库原理与应用(SQL Server)笔记 第十章 用户定义函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。