--1,SQL中的函數,a,Sql中的內置函數,b,標量函數,c,表值函數
--2,內置函數,有系統提供不能修改
--3,標量函數,用戶自定義的函數返回單個值
--4,表值函數,返回表值
--5,優點,允許模塊化開發,可以重複利用速度更快,減少網絡流量
--6,
iF EXISTS (select * from sys.databases where name='netBarDB')
drop database netBarDB
create database netBarDB
go
use netBarDB
go
create table cardInfo
(
cardId int primary key identity,
cardNo nvarchar(16),
cardPassword nvarchar(16),
transactTime datetime ,
cardBalance money
)
go
insert cardInfo values('100-1','123456',GETDATE(),0)
insert cardInfo values('100-20','123456',GETDATE(),1)
insert cardInfo values('100-18','123456',GETDATE(),100)
insert cardInfo values('100-8','123456',GETDATE(),20)
insert cardInfo values('100-9','123456',GETDATE(),30)
insert cardInfo values('100-10','123456',GETDATE(),40)
--創建標量函數
go
create function getCardNo(@id int) --函數名及需要的參數
returns nvarchar(16) --返回值類型,returns要加 S
as
begin
declare @cardNo nvarchar(16)
select @cardNo=cardNo from cardInfo where cardId=@id
return @cardNo --返回需要的數據
end
go
select dbo.getCardNo(1) --調用函數'
--查看自定義函數
sp_help 'getCardNo'
--刪除標量函數
drop function getCardNo
--返回表值函數
go
create function getAll(@id int)
returns table
as
return
select * from cardInfo where cardId=@id
go
--調用表值函數
select * from getAll(1)
--修改函數
go
alter function getAll(@no nvarchar(16))
returns table
as
return
select * from cardInfo where cardNo=@no
go
select * from getAll('100-1')
--什麼時候使用存儲過程和函數
1,返回單個結果集的用表值函數比較好效率
2,邏輯上可以用單個select
3,不執行更新操作
4,不需要動態execute
5,返回一個結果集
6,需要用到臨時表的
以上用表值函數比較好