SQL中的视图、存储过程与函数
- SQL中的视图、存储过程与函数
- 视图可以被看成是虚拟表或存储查询
- 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集(SQL语句和可选控制流语句) 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它
- 函数 存储过程执行的本质是一样的(但函数可以嵌入在sql中使用 可以在select中调用 存储过程则不行)
- 表值函数与标量函数:前者只能返回一个表、后者则可以返回基类型
- 存储过程
create procedure AddStudent --定义存储过程
@Name nvarchar(10),
@Age int,
@Bonus decimal(18,2),
@Gender int
as
begin
insert into Student(Name,Age,Bonus,Gender)values(@Name,@Age,@Bonus,@Gender)
end
exec AddStudent '张菲',21,200,2 --执行存储过程
select * from Student --再次查询表内容
- 函数
- 表值函数
<!--功能说明:分割字符串转成数据表 / 输入参数:@inputstr(原始字符串), @seprator(分割符) / 输出参数:无-->
create function ufn_StrSplit --创建函数
(
@inputstr varchar(max), --创建函数参数
@seprator varchar(100)
)
returns @temp table(s varchar(200))
as
begin
declare @i int
set @inputstr=ltrim(rtrim(@inputstr))
set @i=charindex(@seprator,@inputstr)
while @i>0
begin
insert @temp values(left(@inputstr, @i-1))
set @inputstr=substring(@inputstr, @i+1, len(@inputstr)-@i)
set @i=charindex(@seprator, @inputstr)
end
return
end
- 标量函数
<!--功能说明:返回两日期之间的时间 / 输入参数:@fromdate(日期), @todate(日期), @rand(浮点数) / 输出参数:nvarchar(100)-->
create function RandTime
(
@fromdate datetime,
@todate datetime,
@rand float
)
returns nvarchar(100)
as
begin
declare @return nvarchar(100)
declare @millisecond bigint --直接精确到毫秒
declare @randdate datetime
declare @mindate datetime
--读取工作日时间约束
if @rand<0.4
set @rand=@rand+0.4
else if @rand>0.8
set @rand=@rand-0.1
select @mindate=(case when @fromdate>@todate then @todate else @fromdate end); --取两个时间中的较小时间值
set @millisecond=datediff(ms,@fromdate,@todate);
set @randDate=dateadd(ms,@rand*@millisecond,@mindate);
set @return=convert(varchar(19),@randdate,120);
return @return
end
- 数字函数
- 字符串函数
- 日期函数
- 类型转换函数
- 空值处理函数
- case函数(单值判断/相当于C#switch case)
- case函数(范围判断)
浙公网安备 33010602011771号