加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver存储过程创建以及应用

发布时间:2020-12-12 16:07:25 所属栏目:MsSql教程 来源:网络整理
导读:我想对于研发的人员来说,存储过程大家肯定耳熟能详,在这里我就把我简单使用的体会描述下: ? ? ? ? 存储过程概念: 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 ? ? 存

我想对于研发的人员来说,存储过程大家肯定耳熟能详,在这里我就把我简单使用的体会描述下:

? ? ? ? 存储过程概念:存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。

? ? 存储过程的优点:

? ? ? 1.?如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。

??2.存储过程可被作为一种安全机制来充分利用,可以很好的防止sql语句的注入。

? ? ? ?创建存储过程:

? ? ? 1. 创建语法:

create proc| procedure 存储过程名称

@id int --默认是输出参数即指的是当做条件的参数,@name varchar20output --输出参即指的是输出的参数结果

with encryption --加密操作,这样就不会显示存储过程的详细信息

as

begin

T-sql语句

end

? ? 2.创建存储过程时,首先要检查数据库中是否已经存在了同名的存储过程,这里有两种方式来实现此功能:

1.if (object_id('存储过程名','P')isnotnull)

    	drop proc 存储过程名
   2.if (exists (select * from sys.objects where name = '存储过程名'))
 drop proc 存储过程名  --其中sys.objects是存储所有对象的表,其中包括存储过程、触发器等。这里的sys.objects可以换成sys.procedures 这个是存储所有存储过程的表
   3.实例
    1. 无参数的存储过程	
     create proc proc_users
     as
      select * from users 
    2. 带参数的存储过程  (拿登陆的存储过程来说)
	
 if (object_id('proc_usersEncryotion','P') is notnull)
    	proc proc_usersEncryotion
	create proc proc_usersEncryotion
	(@username varchar(100),@upwd varchar(100) )
	with encryption-- 加密,加密之后自己也看不见存储过程的详细内容!
	as
	begin
		select * from Users where UserName=@username and Upwd=@upwd;
	end
	go  
3.带输入输出参数的存储过程:
	ALTER proc [dbo].[proc_userOUTPUT]
	(@id int,@name varchar(20) output)
	as
	begin?
 select @name=UserName from Users ?where UserId=@id
	end
	在程序中调用:
	public string GetName(int id)
? ? ? ? {
? ? ? ? ? ? string name = "";
? ? ? ? ? ? SqlCommand cmd = new SqlCommand();
? ? ? ? ? ? cmd.CommandText = "proc_userOUTPUT";
? ? ? ? ? ? if (con.State != ConnectionState.Open)
? ? ? ? ? ? ? ? con.Open();
? ? ? ? ? ? cmd.Connection = con;
? ? ? ? ? ? cmd.CommandType = CommandType.StoredProcedure;
? ? ? ? ? ? SqlParameter[] param = { new SqlParameter("@id",id),new SqlParameter("@name",SqlDbType.VarChar,20) };


? ? ? ? ? ? foreach (var para in param)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? cmd.Parameters.Add(para);
? ? ? ? ? ? }
? ? ? ? ? ? cmd.Parameters["@name"].Direction = ParameterDirection.Output;
? ? ? ? ? ? cmd.ExecuteNonQuery();
? ? ? ? ? ? name = cmd.Parameters["@name"].Value.ToString();


? ? ? ? ? ? return name;
? ? ? ? }
      4. 带输入参数以及返回值的存储过程:
	ALTER proc [dbo].[proc_UserLogin]
	( @name varchar(20),@upwd varchar(20))
	as
 declare @value int
	begin
 select @value=COUNT(*) from Users where UserName=@name and Upwd=@upwd?
 return @value;
	end
  这样就必须接return返回的值,程序中的操作如下:
	public int usersLogin( string username,string upwd)
? ? ? ? {
? ? ? ? ? ? int i = 0;
? ? ? ? ? ? SqlCommand cmd = new SqlCommand();
? ? ? ? ? ? cmd.CommandText = "proc_UserLogin";
? ? ? ? ? ? if (con.State != ConnectionState.Open)
? ? ? ? ? ? ? ? con.Open();
? ? ? ? ? ? cmd.Connection = con;
? ? ? ? ? ? cmd.CommandType = CommandType.StoredProcedure;
? ? ? ? ? ? SqlParameter[] param = { new SqlParameter("@name",username),new SqlParameter("@upwd",upwd),new SqlParameter("@value",SqlDbType.Int) };
? ? ? ? ? ? //SqlParameter papa = new SqlParameter("@name",20);
? ? ? ? ? ? //cmd.Parameters.Add(papa);
? ? ? ? ? ? //cmd.Parameters["@name"].Value = username;
? ? ? ? ? ? foreach (var para in param)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? cmd.Parameters.Add(para);
? ? ? ? ? ? }
? ? ? ? ? ? cmd.Parameters["@value"].Direction = ParameterDirection.ReturnValue;
? ? ? ? ? ? cmd.ExecuteNonQuery();


? ? ? ? ? ? i = Convert.ToInt16(cmd.Parameters["@value"].Value.ToString());
? ? ? ? ? ? return i;
? ? ? ? }
	这样i的值就会是返回的值。
 好了就简单的介绍到这里,希望大家能够踊跃的评论,大家一起学习

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读