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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

关系数据库SQL之可编程性函数(用户自定义函数)

發(fā)布時(shí)間:2023/12/10 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关系数据库SQL之可编程性函数(用户自定义函数) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在關(guān)系型數(shù)據(jù)庫(kù)中除了前面幾篇基本的數(shù)據(jù)庫(kù)和數(shù)據(jù)表操作之外,還提供了可編程性的函數(shù)、存儲(chǔ)過(guò)程、事務(wù)、觸發(fā)器及游標(biāo)。

本文介紹的是函數(shù)。

函數(shù)分為兩種:

  • 系統(tǒng)函數(shù)

  • 用戶自定義函數(shù)


  • 準(zhǔn)備工作

    這里以銀行存取款為例說(shuō)明。

    1、創(chuàng)建數(shù)據(jù)表

    --創(chuàng)建賬戶信息表 create table AccountInfo (--賬戶IDCustID int identity(1,1) primary key,--帳戶名稱CustName varchar(20) not null,--身份證號(hào)IDCard varchar(18),--電話TelePhone varchar(13) not null,--地址Address varchar(50) default('地址不詳') )go--創(chuàng)建卡信息表 create table CardInfo (--銀行卡卡號(hào)CardID varchar(19) primary key,--銀行卡密碼CardPassWord varchar(6) not null default('888888'),--身份證號(hào)CustID int references AccountInfo(CustID),--存款類型SaveType varchar(10) not null ,--開(kāi)戶日期OpenDate datetime not null default(getdate()),--開(kāi)戶金額OpenMoney money not null check(OpenMoney>1),--可用余額LeftMoney money not null check(LeftMoney>1),--是否掛失IsLost varchar(2) not null default('否') )go--交易信息表 create table TransInfo (--交易編號(hào)transID int identity primary key,--銀行卡卡號(hào)CardID varchar(19) not null,--交易類型TransType varchar(4) not null,--交易金額TransMoney money not null,--交易時(shí)間TransDate datetime default(getdate()) ) go/* 1.使用T-SQL語(yǔ)句為交易信息表(TransInfo)的銀行卡卡號(hào)(CardID)字段創(chuàng)建外鍵 */--外鍵(銀行卡卡號(hào)CardID) alter table [dbo].TransInfo with check add constraint [fk_CardInfo_TransInfo] foreign key(CardID) references [dbo].[CardInfo] (CardID) go/* 2.使用T-SQL語(yǔ)句為賬戶信息表(AccountInfo)的銀行卡卡號(hào)(IDCard)字段創(chuàng)建唯一約束 */ alter table [dbo].[AccountInfo] add unique (IDCard ASC) go/* 3.使用T-SQL語(yǔ)句創(chuàng)建約束,使銀行卡信息表(CardInfo)的銀行卡卡號(hào)(CardID)字段值長(zhǎng)度只能為19位 */ alter table [dbo].[CardInfo] add constraint CK_CardID check(len(CardID) = 19) go/* 4.使用T-SQL語(yǔ)句使交易信息表(TransInfo)的交易類型(TransType)字段只能選擇'存款'和'取款',銀行卡信息表(CardInfo)的存款類型(SaveType)字段只能選擇'定期'和'活期' */ alter table [dbo].TransInfo add constraint CK_TransType check(TransType = '存款' or TransType = '取款') go alter table [dbo].CardInfo add constraint CK_SaveType check(SaveType = '定期' or SaveType = '活期') go

    2、插入基本數(shù)據(jù)

    --插入三個(gè)賬戶信息 insert into AccountInfo values('孫悟空','422322001502110017','027-88888888','花果山'),('唐僧','420322001902140019','027-85368962','大唐'),('沙和尚','410340001572144714','13295654665','通天河') insert into CardInfo values('1027 3526 1536 1135','888888',1,'定期',default,500,500,'否'),('1029 3326 1536 1235','888888',2,'活期',default,1500,1500,'否'),('1324 3626 7532 1935','888888',1,'活期',default,4500,4500,'否')

    函數(shù)調(diào)用

    SELECT 字段列表/* FROM <函數(shù)名稱>([參數(shù)列表]);

    系統(tǒng)函數(shù)

    數(shù)據(jù)庫(kù)系統(tǒng)定義的函數(shù),即內(nèi)置函數(shù)。

    函數(shù)列別說(shuō)明
    聚合函數(shù)執(zhí)行的操作是將多個(gè)值合并為一個(gè)值。例如?COUNT、SUM、MIN?和MAX。
    配置函數(shù)是一種標(biāo)量函數(shù),可返回有關(guān)配置設(shè)置的信息。
    加密函數(shù)支持加密、解密、數(shù)字簽名和數(shù)字簽名驗(yàn)證。
    游標(biāo)函數(shù)返回有關(guān)游標(biāo)狀態(tài)的信息。
    日期和時(shí)間函數(shù)可以更改日期和時(shí)間的值。
    數(shù)學(xué)函數(shù)執(zhí)行三角、幾何和其他數(shù)字運(yùn)算。
    元數(shù)據(jù)函數(shù)返回?cái)?shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)對(duì)象的屬性信息。
    排名函數(shù)是一種非確定性函數(shù),可以返回分區(qū)中每一行的排名值。
    行集函數(shù)返回可在?Transact-SQL?語(yǔ)句中表引用所在位置使用的行集。
    安全函數(shù)返回有關(guān)用戶和角色的信息。
    字符串函數(shù)可更改?char、varchar、nchar、nvarchar、binary?和?varbinary?的值。
    系統(tǒng)函數(shù)對(duì)系統(tǒng)級(jí)的各種選項(xiàng)和對(duì)象進(jìn)行操作或報(bào)告。
    系統(tǒng)統(tǒng)計(jì)函數(shù)返回有關(guān)?SQL Server?性能的信息。
    文本和圖像函數(shù)可更改?text?和?image?的值。

    具體的函數(shù)如果不清楚請(qǐng)自行搜索,本文著重介紹用戶自定義函數(shù)。


    用戶自定義函數(shù)

    除了系統(tǒng)提供的函數(shù),用戶可以根據(jù)自己的需求自定義函數(shù);
    用戶自定義函數(shù),顧名思義,就是數(shù)用戶自己定義的函數(shù);
    用戶自定義函數(shù)分為兩類:表值函數(shù)和標(biāo)量值函數(shù);
    其中,表值函數(shù)也分兩種:內(nèi)聯(lián)表值函數(shù)和多語(yǔ)句表值函數(shù)。


    表值函數(shù)

    表值函數(shù)是返回一個(gè)Table類型,相當(dāng)與一張存儲(chǔ)在內(nèi)存中的一張?zhí)摂M表。

    內(nèi)聯(lián)表值函數(shù)

    語(yǔ)法

    CREATE FUNCTION <函數(shù)名稱> ( -- 添加函數(shù)所需的參數(shù),可以沒(méi)有參數(shù)[<@param1> <參數(shù)類型>][,<@param1> <參數(shù)類型>]… ) RETURNS TABLE AS RETURN (-- 查詢返回的SQL語(yǔ)句SELECT查詢語(yǔ)句 )

    示例

    /* * 創(chuàng)建內(nèi)聯(lián)表值函數(shù),查詢交易總額大于1W的開(kāi)戶人個(gè)人信息 */ create function getCustInfo() returns @CustInfo table --返回table類型 (--賬戶IDCustID int,--帳戶名稱CustName varchar(20) not null,--身份證號(hào)IDCard varchar(18),--電話TelePhone varchar(13) not null,--地址Address varchar(50) default('地址不詳') ) as begin--為table表賦值insert into @CustInfoselect CustID,CustName,IDCard,TelePhone,Address from AccountInfo where CustID in (select CustID from CardInfo where CardID in (select CardID from TransInfo group by CardID,transID,TransType,TransMoney,TransDate having sum(TransMoney)>10000))return end go -- 調(diào)用內(nèi)聯(lián)表值函數(shù) select * from getCustInfo() go

    多語(yǔ)句表值函數(shù)

    語(yǔ)法

    CREATE FUNCTION <函數(shù)名稱> ( -- 添加函數(shù)所需的參數(shù),可以沒(méi)有參數(shù)[<@param1> <參數(shù)類型>][,<@param1> <參數(shù)類型>]… ) RETURNS <@定義的表名> TABLE (-- 添加返回?cái)?shù)據(jù)表的列<列名1> <數(shù)據(jù)類型1>, <列名2> <數(shù)據(jù)類型2>,……<列名n> <數(shù)據(jù)類型n>] ) AS BEGIN--為<@定義的表名>賦值的SQL語(yǔ)句RETURN END

    示例

    /* * 創(chuàng)建多語(yǔ)句表值函數(shù),可以查詢出一個(gè)月內(nèi)有交易記錄的用戶姓名,聯(lián)系電話,身份證號(hào)碼,銀行卡卡號(hào)和賬戶余額 */ create function getCustInfoMonth() returns @CustInfo table --返回table類型 (--帳戶名稱CustName varchar(20) not null,--電話TelePhone varchar(13) not null,--身份證號(hào)IDCard varchar(18),--銀行卡卡號(hào)CardID varchar(19) not null,--可用余額LeftMoney money not null check(LeftMoney>1) ) as begin--為table表賦值insert into @CustInfoselect A.CustName, A.TelePhone, A.IDCard, T.CardID, C.LeftMoneyfrom AccountInfo as A inner join CardInfo as C on A.CustID = C.CustID inner join TransInfo as T on C.CardID = T.CardID where exists(select * from TransInfo group by CardID,TransDate,transID,TransType,TransMoneyhaving datediff(MONTH,TransDate,GETDATE())=0)return end go -- 調(diào)用多語(yǔ)句表值函數(shù) select * from getCustInfo() go

    標(biāo)量值函數(shù)

    返回一個(gè)標(biāo)量值

    語(yǔ)法

    CREATE FUNCTION <FunctionName> (-- 添加函數(shù)所需的參數(shù),可以沒(méi)有參數(shù)[<@param1> <參數(shù)類型>][,<@param1> <參數(shù)類型>]… ) RETURNS <函數(shù)返回?cái)?shù)據(jù)類型> AS BEGIN-- 定義返回?cái)?shù)據(jù)變量DECLARE @變量名 數(shù)據(jù)類型-- 通過(guò)SQL語(yǔ)句為返回變量賦值SELECT @變量名 = SQL語(yǔ)句-- 返回結(jié)果RETURN @變量名END

    示例

    /* 7.創(chuàng)建標(biāo)量值函數(shù),根據(jù)用戶傳入的銀行卡卡號(hào),獲得該卡交易次數(shù) */ create function getTransCount (@CardID varchar(19) --參數(shù)銀行卡卡號(hào) ) returns int --返回int類型 as begindeclare @count intselect @count = count(*) from TransInfo where CardID = @CardIDreturn @count end go -- 調(diào)用標(biāo)量值函數(shù) select getTransCount('1027 3526 1536 1135') as 次數(shù) go

    函數(shù)部分介紹到這里,如有疑問(wèn),請(qǐng)留言。

    謝謝各位看官的瀏覽。

    總結(jié)

    以上是生活随笔為你收集整理的关系数据库SQL之可编程性函数(用户自定义函数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 最新毛片网站 | 人人免费操 | 中文不卡av| 香蕉视频在线观看www | av在线不卡免费 | 强开小嫩苞一区二区三区网站 | 国产乱淫av片 | 欧美精品一区二区三区蜜臀 | 日产欧产va高清 | 四虎精品欧美一区二区免费 | 黄色性情网站 | 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 欧美日韩精品在线观看 | 综合久久一区 | 天堂www中文在线资源 | 久久久久久久久久久综合 | 欧美日韩激情在线 | 久久久久亚洲av片无码v | 这里只有精品视频 | 久久久性色精品国产免费观看 | 国产精品美女主播 | 日本一区二区在线 | 国产日韩一区二区三区在线观看 | 高清欧美性猛交xxxx黑人猛交 | 91插插插插插插插 | 激情四射婷婷 | 国产夫妻久久 | 日本中文字幕成人 | 怡红院院av | 波多野 在线 | 亚洲黄色小说网 | 亚洲射图 | a级性生活视频 | 日本美女久久久 | 男人久久| 在线观看亚洲专区 | 日韩久久久久久久久久 | 小伸进喷水网站 | 欧美一级性视频 | 涩涩资源网| 老牛影视av一区二区在线观看 | 成人试看120秒体验区 | 中出中文字幕 | xxxx日本高清 | 久久久久久影视 | 欧美性猛交一区二区三区精品 | 日韩亚洲欧美在线 | 冲田杏梨av | 国产白丝精品91爽爽久久 | 久久伊人一区 | 精品一区二区三区日韩 | 香蕉视频久久 | 69久久久久 | 1769国产精品 | 台湾黄色网址 | 国产精品影音先锋 | 国产一级自拍 | 午夜成人影片 | 国产精品伦一区二区三级古装电影 | 婷婷六月综合 | 国产精品黄在线观看 | 人妻熟女一区二区三区app下载 | 国产美女被遭强高潮免费网站 | 国产又粗又黄又爽视频 | 女女高潮h冰块play失禁百合 | 老司机午夜免费福利 | 免费高清黄色 | 在线观看免费大片 | 国产精品一区在线观看 | 精品国产色 | 66亚洲一卡2卡新区成片发布 | 日本一区三区 | xxxxxx国产| 国产a不卡| 亚洲国产精品视频一区二区 | 色综合影视| 极品美女销魂一区二区三区 | 亚洲精品在线影院 | 国产做爰xxxⅹ久久久精华液 | 4438x在线观看 | 手机av网| 小妹色播 | 中文字幕免费高清在线观看 | 午夜在线观看免费视频 | 美女热逼 | 国产九九精品视频 | 樱桃香蕉视频 | 一区二区三区四区中文字幕 | 国产成人aaa| 国产污片在线观看 | 亚洲精品乱码久久久久久久久久久久 | 国产老熟妇精品观看 | 国产高清在线观看视频 | 色伊人网 | 欧美67194 | 香蕉成人在线视频 | 深夜福利国产 | 激情网站在线 | 超碰天天|