摘要:函數(shù)分為兩種系統(tǒng)函數(shù)用戶自定義函數(shù)準(zhǔn)備工作這里以銀行存取款為例說(shuō)明。具體的函數(shù)如果不清楚請(qǐng)自行搜索,本文著重介紹用戶自定義函數(shù)。
前言
在關(guān)系型數(shù)據(jù)庫(kù)中除了前面幾篇基本的數(shù)據(jù)庫(kù)和數(shù)據(jù)表操作之外,還提供了可編程性的函數(shù)、存儲(chǔ)過(guò)程、事務(wù)、觸發(fā)器及游標(biāo)。
本文介紹的是函數(shù)。
函數(shù)分為兩種:
系統(tǒng)函數(shù)
用戶自定義函數(shù)
這里以銀行存取款為例說(shuō)明。
1、創(chuàng)建數(shù)據(jù)表
--創(chuàng)建賬戶信息表 create table AccountInfo ( --賬戶ID CustID 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,"否")
SELECT 字段列表/* FROM <函數(shù)名稱>([參數(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ù)。
除了系統(tǒng)提供的函數(shù),用戶可以根據(jù)自己的需求自定義函數(shù);
用戶自定義函數(shù),顧名思義,就是數(shù)用戶自己定義的函數(shù);
用戶自定義函數(shù)分為兩類:表值函數(shù)和標(biāo)量值函數(shù);
其中,表值函數(shù)也分兩種:內(nèi)聯(lián)表值函數(shù)和多語(yǔ)句表值函數(shù)。
內(nèi)聯(lián)表值函數(shù) 語(yǔ)法表值函數(shù)是返回一個(gè)Table類型,相當(dāng)與一張存儲(chǔ)在內(nèi)存中的一張?zhí)摂M表。
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類型 ( --賬戶ID CustID 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 @CustInfo select 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 @CustInfo select A.CustName, A.TelePhone, A.IDCard, T.CardID, C.LeftMoney from 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,TransMoney having datediff(MONTH,TransDate,GETDATE())=0) return end go -- 調(diào)用多語(yǔ)句表值函數(shù) select * from getCustInfo() go
語(yǔ)法返回一個(gè)標(biāo)量值
CREATE FUNCTION示例( -- 添加函數(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 begin declare @count int select @count = count(*) from TransInfo where CardID = @CardID return @count end go -- 調(diào)用標(biāo)量值函數(shù) select getTransCount("1027 3526 1536 1135") as 次數(shù) go
函數(shù)部分介紹到這里,如有疑問(wèn),請(qǐng)留言。
謝謝各位看官的瀏覽。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17541.html
摘要:前言前面關(guān)系數(shù)據(jù)庫(kù)之可編程性函數(shù)用戶自定義函數(shù)一文提到關(guān)系型數(shù)據(jù)庫(kù)提供了可編程性的函數(shù)存儲(chǔ)過(guò)程事務(wù)觸發(fā)器及游標(biāo),前文已介紹了函數(shù)存儲(chǔ)過(guò)程事務(wù),本文來(lái)介紹一下觸發(fā)器的使用。觸發(fā)器是在執(zhí)行之后觸發(fā),而觸發(fā)器是在執(zhí)行之前觸發(fā)。 前言 前面關(guān)系數(shù)據(jù)庫(kù)SQL之可編程性函數(shù)(用戶自定義函數(shù))一文提到關(guān)系型數(shù)據(jù)庫(kù)提供了可編程性的函數(shù)、存儲(chǔ)過(guò)程、事務(wù)、觸發(fā)器及游標(biāo),前文已介紹了函數(shù)、存儲(chǔ)過(guò)程、事務(wù),本...
閱讀 3522·2021-11-15 11:38
閱讀 840·2021-11-08 13:27
閱讀 2254·2021-07-29 14:50
閱讀 2982·2019-08-29 13:06
閱讀 850·2019-08-29 11:22
閱讀 2423·2019-08-29 11:04
閱讀 3514·2019-08-28 18:23
閱讀 900·2019-08-26 13:46