存储过程和函数类似于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'