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
视图可以被看成是虚拟表或存储查询
存储过程(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
相关文章推荐
- 从 syscomments 取系统存储过程、用户存储过程、视图、函数、触发器等对象的sql定义语句
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- sql server查询数据库中所有包含某文本的存储过程、视图和函数的SQL
- SQl 查询表、存储过程、函数、视图等所在的存储过程
- SQL 查找存储过程及视图与自带函数
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- SQL查找某个"关键字"在视图、函数、存储过程中存在
- 查询数据库中所有包含某文本的存储过程、视图和函数的SQL
- 查询数据库中所有包含某文本的存储过程、视图和函数的SQL
- SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql
- 手动 重编译存储过程、SQL语句、函数、触发器、视图
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
- [MSSQL]查看SQL SERVER 加密存储过程,函数,触发器,视图
- Microsoft SQL Server 自定义函数和存储过程的区别
- mysql查看所有存储过程,函数,视图,触发器,表
- SQL使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
- SQL自定义函数与存储过程