当前位置: 首页 > article >正文

SQL server 存储过程与函数

一、SQL的存储过程:

存储过程其实就是一系列SQL语句的集合体,我们可以理解为一个封装单元,这个单元可以有出入参数,也可以没有。我们举几个简单的例子:

(1)无入参无出参的存储过程:

create proc  usp_test 
as 
update stu set  ssex='0' where  ssex=''
return 

exec  usp_test

(2)无入参有出参的存储过程:

alter proc  usp_test 
as 
update stu set  ssex='0' where  ssex=''
select * from stu where  ssex='0' 
return 

exec  usp_test

(3)有入参无出参的存储过程:

alter proc  usp_test 
@age  int 
as 
update stu set  ssex='1' where  sage>=@age 
return 

exec usp_test 20

(4)有入参有出参的存储过程:

alter proc  usp_test 
@age  int 
as 
update stu set  ssex='1' where  sage>=@age
select * from stu where  ssex='1' 
return 

exec usp_test 20

综合以上几个例子,我们能看到存储过程的创建、修改基本格式,当使用入参时怎么更新和返回数据等,其实再复杂的存储过程,都是由一条条简单的语句集合而成的。要理解存储过程,首先心理上不要有犯难和逃避,不能一看到代码多了就扭头不想理,正视它你才能搞定它。

二、函数

函数和存储过程有很大的相似性,也是一堆代码的集合,也有出入参

计算年龄的函数:

 CREATE function age_cs 
 (@ksrq  date,
 @jsrq  date)
 returns VARCHAR (16) 
as
begin
declare @days int ,@year int,
        @day int,@age  VARCHAR (16) 
select @days=datediff(day,@ksrq,@jsrq)
select @year=@days/365
select @day=@days%365

select @age= convert(varchar(3),@year)+'岁'
             +convert(varchar(3),@day)+'天'
return(@age)
 end

解析:

(1)函数的入参必须用括号包住,定义完入参以后紧接着就需要定义返回的参数类型,正文部分必须用begin...end包裹住;

(2)定义了四个变量:@days总天数, @year年数,@day天数,@age输出的年龄。

先用datediff函数算出总天数,然后年数等于总天数除以365得到的整数,因为两个字段都是int型的,所以直接除下来不会有小数。

再用总天数%365得到余天数,注意%是取余的意思。

最后我们再把算出来的年龄,拼接起来赋值给@age。

(3)用return(@age) 输出结果。

总结:

(1)存储过程和函数都可以将一段SQL语句进行封装,这样大大的方便了实际使用时候的调用步骤;

(2)存储过程里面可以嵌套存储过程,也经常会调用各种函数;

(3)函数里面可以调用其他函数,但是一般不嵌套存储过程;

(4)上面例子中的函数,也可以改写成存储过程,但是函数使用起来要方便的多,因为函数可以直接用select联用,但是存储过程只能用exec执行。


http://www.kler.cn/news/353486.html

相关文章:

  • 【数据结构与算法】LeetCode每日一题
  • 机器学习与神经网络:开启物理学的新篇章
  • SEM推广如何进行数据分析
  • Ubuntu:用户不在sudoers文件中
  • 【Java小白图文教程】-01-Java环境安装-变量
  • 计算机是如何输入存储输出汉字、图片、音频、视频的
  • 10:00面试,10:08就出来了,问的问题有点变态。。。
  • Spring Boot框架下的知识管理策略
  • 【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码
  • C#使用PdfSharp生成PDF文件实例详解
  • find_library、pkg_check_modules、pkg_search_module的区别
  • 【Flutter】Dart:环境搭建
  • 1.项目初始化
  • 关键词提取技术:TF-IDF 详解
  • react页面跳转时携带参数,返回时能展示跳转之前的数据
  • informer学习笔记
  • SpringBoot请求注解详解
  • 【云从】四、私有网络VPC
  • 学习threejs,THREE.LineDashedMaterial 虚线材质,基于gosper高斯帕曲线生成雪花动画
  • 【c++】左值右值