黑马程序员_存储过程知识点

存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,可以重复使用,可降低网络流量。 可以增强安全性。 当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。

存储过程举例如下:

create proc [dbo].[sp_UserLogin]

(  

@User_Name VarChar(50),  

@User_Password VarChar(50),  

@User_LoginIP VarChar(50),  

@User_ID Int OutPut,

 @ErrNum Int OutPut,  

@ErrMsg VarChar(200) OutPut

)

As

set nocount on BEGIN

---定义变量------------------------------------------------

 Declare @Password VarChar(50)  

 Declare @Status TinyInt -----------------------------------------------------------

---初始变量------------------------------------------------  

Set @ErrNum = 0

 Set @ErrMsg = '' -----------------------------------------------------------

 Select @User_ID = [User_ID], @PassWord = User_Password, @Status = [Status] From User_Info Where [User_Name] = @User_Name  If @@RowCount = 0  Begin   Set @ErrNum = 1   Set @ErrMsg = '您登录的账户不存在'   Return  End  If @Password <> @User_Password  Begin   Set @ErrNum = 2   Set @ErrMsg = '密码错误'   Return  End  If @Status = 0  Begin   Set @ErrNum = 3   Set @ErrMsg = '您的账户已被锁定'   Return  End  Update User_Detail Set User_LoginNum = IsNull(User_LoginNum, 0) + 1, User_LoginTime = GetDate(), User_LoginIP = @User_LoginIP Where [User_ID] = @User_ID  

Return End

set nocount off

 

1、@@ROWCOUNT是返回受上一语句影响的行数

2、定义变量         Declare @Password VarChar(50)  Declare @Status TinyInt

3、设置初始变量         Set @ErrNum = 0  Set @ErrMsg = ''

4、return表示终止存储过程的执行并返回结果;每一个begin都要有一个end来结尾;if和else等。

5、<>表示“不等于”,@@Error表示返回与@@ERROR 最近的语句错误码,局限于DML语句和select语句,如果执行他们出现错误,则返回一个不等于0的错误码,如果没有出错,则返回0。通常使用它来判断语句有没有执行成功。

6、用输出变量来输出消息结果,如不存在,不正确等。

7、IsNull(User_LoginNum, 0),IsNull()函数表示如果该变量为null值,则用0赋值。

8、获取存储过程中输出参数的值: 传入参数的时候,设置。。。例如~ parameters[0].Direction = ParameterDirection.Output; 执行完以后。。。获取。。例如~ Session["Business_Id"] = parameters[0].Value;

9、在执行sql语句时可以为输出参数或定义的变量赋值,如:    Select @User_ID = [User_ID], @PassWord = User_Password, @Status = [Status] From User_Info Where [User_Name] = @User_Name

10、Begin Tran表示开启事务,Commit Tran表示提交事务,Rollback Tran表示回滚事务。变量定义,初始化变量和输出参数,可以定义在事务中也可以定义在as之后。可以使用Goto语句进行跳转,但要在最后设定跳转的断点处,如:Goto theEnd,theEnd:。。。

11、创建存储过程时,定义输入和输出变量时要用逗号“,”隔开,其他的任何语句都可以不加逗号,但是必须都是单独一行。     定义变量时,变量要加@符号,后跟数据类型,如何要求有长度,则紧跟小括号,里面是长度,最后加output还是input。如:@ErrMsg VarChar(200) OutPut

12、常用函数:If Exists(select ...from ...)表示是否有记录。

posted @ 2012-12-01 16:28  liqing123  阅读(229)  评论(0编辑  收藏  举报