SqlServer存储过程及函数

  存储过程和函数类似于Java中的方法。

⒈存储过程

  一组预先编译好的sql语句的集合,理解成批处理语句。

  好处:

    ①提高代码的重用性

    ②简化操作

    ③减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

  1.创建语法 

1 if OBJECT_ID(N'procName',N'P') is not null
2 drop proc procName
3 create proc /*procedure*/ procName
4 @paramName paramType /*= '默认值' output*/
5 as
6     sql
7 go

  参数带output则为输出参数

  2.调用语法。

1 exec 存储过程名(实参列表);

  3.删除存储过程

1 drop proc /*procedure*/ 存储过程名;

  4.查看存储过程的信息

1 exec sp_helptext  '存储过程名';

 

⒉函数

  函数和存储过程意义和好处都是一样的。它们的唯一区别就是:

    存储过程可以没有返回值,也可以有多个返回值,适合做批量插入数据、批量更新等。

    函数必须有返回值,而且只能有1个,适合做处理数据后返回1个结果。

 

  1.创建语法

    ①标量函数--即返回的结果只是一个标量,通俗的讲返回的结果就是一种类型的一个值。

    创建:

1 create function funName(@paramName paramType)
2 returns returnType
3 as
4 begin 
5     sql
6 end
7 go

    调用:

select dbo.函数名(参数列表); 

    ②内联表值函数--即返回的是一张表数据。

    创建:

1 create function funName(@paramName paramType)
2 returns table
3 as
4     return (select * from Table)
5 go

    调用:

1 select * from funName();

    ③多语句表值函数--即通过多条语句来创建Table类型的数据,由我们自行指定具体的Table类型的结构

    创建:

 1 create function funName()
 2 returns @result table( 
 3     id int,
 4     username varchar(20)
 5     )
 6 as
 7 begin
 8     insert into @result select id,username from Study.dbo.users
 9     return 
10 end
11 go

    调用:

1 select * from funName();

  2.删除函数

1 drop function 函数名;

  3.查看函数

1 exec sp_helptext '函数名';
1 select definition from sys.all_sql_modules sm
2 
3 inner join sys.all_objects ao on sm.object_id = ao.object_id
4 
5 where name ='functionName'and type ='FN'

 

posted @ 2019-04-27 15:38  SpringCore  阅读(4762)  评论(1编辑  收藏  举报