SQLServer存储过程
存错过程(procedure)--从字面意思上来看,存储过程就是被存储的一种程序、过程
- 存储过程就是作为可执行对象存放在数据库中的一个或者多个SQL语句
- 通俗的说,存储过程就是能完成一定操作的SQL语句
存储过程的作用
- 在创建的时候进行编译,以后不需要重新编译,所以执行速度非常快
- 可以对一组复杂的操作进行封装,可以重复调用,有点类似我们编程中的方法。
- 可以设置不同的用户的有没有调用指定存储过程的权限
使用存储过程
创建存储过程基于的表
Demo 1 最简单的无参数无返回值的存储过程
-- 查询全部的司机的信息
go
create procedure proc_query_Driver
as
begin
select * from Driver
end
--执行存储过程
exec proc_query_Driver
Demo 2 无返回值有参数的存储过程
--根据名称查找司机信息
create procedure proc_Query_Driver_ByName
@Name varchar(100)
as
begin
select * from Driver where Name=@Name
end
--执行存储过程
exec proc_Query_Driver_ByName 'DongPeng'
Demo 3 有返回值无参数的存储过程
--随机返回一条司机记录的Id
create procedure proc_Query_Driver_ByRandom
@Id varchar(100) output
as
begin
declare @countDriver int
set @countDriver = (select count(*) from Driver)
if(@countDriver!=0)
begin
--随机取出一条司机的记录,获取该记录的ID
set @Id= (select top 1 DriverId from Driver order by newid())
end
else begin
--如果没有司机 返回 null
set @Id = null
end
end
--执行存储过程
declare @Id varchar(100)
--执行时需要标明,参数是输出参数
exec proc_query_Driver_ByRandom @id output
select @id
Demo4 有参数有返回值的存储过程
--根据性别查询司机的数量
create procedure proc_Query_Count_ByGender
@Gender varchar(10),
@count int output
as
begin
set @count=(select count(*) from Driver where Gender=@Gender)
end
--执行存储过程
declare @count int
exec proc_Query_Count_ByGender 'M',@count output
select @count
ADO.Net 调用存储过程
private static string _connectionStr = "server=.;uid=your username;pwd=your password;database=VehicleDB";
//执行 proc_Query_Count_ByGender 存储过程
public static int ExecProcQeruyDriverCount(string gender)
{
//数据库链接类
using (SqlConnection conn = new SqlConnection(_connectionStr))
{
//打开链接
conn.Open();
//数据库命令,传入要执行的存储过程和数据库连接类
using (SqlCommand cmd = new SqlCommand("proc_Query_Count_ByGender", conn))
{
//这是命令的类型
cmd.CommandType = CommandType.StoredProcedure;
//传入参数
cmd.Parameters.Add(new SqlParameter("@Gender", SqlDbType.VarChar)).Value = gender;
//添加返回参数
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int)).Direction = ParameterDirection.Output;
//执行命令
cmd.ExecuteNonQuery();
//获取返回参数
int driverCount = (int)cmd.Parameters["@count"].Value;
return driverCount;
}
}
}
//调用
static void Main(string[] args)
{
int driverCount = SQLHelper.ExecProcQeruyDriverCount("M");
Console.WriteLine(driverCount);
Console.ReadKey();
}
//输出结果为8