您的位置:首页 > 数据库

SQL中的视图、存储过程与函数

2011-09-12 12:43 381 查看
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

数字函数

abs(): 绝对值
ceiling(): 舍入到最大整数/天花板
floor(): 舍入到最小整数/地板
round(): 四舍五入/”舍入到离我半径最近的数” round(-3.146,2)=-3.15
max(): 最大值
min(): 最小值
avg(): 平均值
sum(): 和
count(): 数量

字符串函数

len(): 字符串长度
lower()/upper(): 转小写/大写
lrtim(): 去掉左侧空格
rtrim(): 去掉右侧空格
substring(string,start_position,length): 取子字符串/与C#不同 start_position参数从1开始

日期函数

getdate(): 取得当前日期时间
dateadd(datepart,number,date): 计算增加后日期/date为待计算日期/number为增量/datepart为计量单位(年year/yy 季度quarter/qq 月month/mm 当年度第几天dayofyear/dy 天day/dd 小时hour/hh …)
datediff(datepart,startdate,enddate): 计算两日期差额
datepart(datepart,date): 返回一个日期的特定部分

类型转换函数

<!--cast(expression as data_type)/convert(data_type as expression)-->
select cast(‘12’,int),cast(‘2008-10-10’,datetime),convert(vchar(50),’12’)
select convert(int,’123’)+1 //转换为计算类型

空值处理函数

<!--Isnull(expression,value): expression不为空则返回expression 否则返回value-->
select isnull(name,’佚名’) as 姓名 from t_person1

case函数(单值判断/相当于C#switch case)

select

(
  case level
  when 1 then ‘good’
  when 2 then ‘bad’
  else ‘hello’
)
from t_person

case函数(范围判断)

select name
(
  case
  when salary<2000 then ‘低收入’
  when salary>5000 then ‘高收入’
  else ‘不明’
) as ‘收入水平’
from t_person
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐