--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,需要用到临时表的
以上用表值函数比较好