存储过程(Stored Procedure)
存储过程定义
摘自百度百科
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
可以简单理解为存储过程是封装好的一个完成特定功能函数,通过使用存储过程名来执行这个函数。
存储过程如何使用
在SQL Server中创建存储过程
找到数据库-表-可编译性-存储过程-右击新建存储过程。
create proc sp_name @[参数名] [类型],@[参数名] [类型] as begin ......... end
实例:
CREATE PROCEDURE news_update --存储过程名 --使用到的参数, @id int, @title varchar(100), @content text, @caid int AS BEGIN --SQL语句 UPDATE news SET title = @title, [content] = @content, caId = @caid where id = @id END GO
调用存储过程
存储过程可以在三种环境下被调用:
command命令下,基本语法为:exec sp_name [参数名];
实例:
exec news_update @id=6,@title=abc,@content=def,@caid=13
SQL环境下,基本语法为:call sp_name [参数名];
PL/SQL环境下,基本语法为:begin sp_name [参数名] end;
删除存储过程
drop procedure sp_name
C#中调用存储过程
DAL层代码
SQLHelper类 /// <summary> /// 指向带参数的SQL语句或存储过程 /// </summary> /// <param name="cmdText">QL语句或存储过程</param> /// <param name="paras">参数集合</param> /// <param name="ct">命令类型</param> /// <returns></returns> public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) { //初始化 System.Data.DataTable 类的新实例。 DataTable dt = new DataTable(); //使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand //类的新实例 cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; //在Parameters末尾添加值数组 cmd.Parameters.AddRange(paras); //using执行完时释放()中的内容,相应的数据库连接也会关闭 using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { //通过所提供的 System.Data.IDataReader,用某个数据源的值填充 System.Data.DataTable。 如果 System.Data.DataTable // 已经包含行,则从数据源传入的数据与现有行合并。 dt.Load(sdr); } //返回查询结果 return dt; } News类 /// <summary> /// 取出最新10条新闻(所属分类、新闻标题、发布时间) /// </summary> /// <returns></returns> public DataTable SelectNewNews() { //procNews_SelectNewNews为存储过程名 return sqlhelper.ExecuteQuery("procNews_SelectNewNews", CommandType.StoredProcedure); }
为什么使用存储过程
存储过程只在创造时进行编译,以后每次执行存储过程都不需重新编译;而一般SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度;
当对数据库进行复杂操作时(如对多个表进行增删改查),可将这些复杂操作通过存储过程封装起来,避免程序中sql语句过长。