MS-SQL存储过程使用的几点(收集)

 一、存储过程return与output区别
 <1>  共同点:都能返回值(但return只能返回int类型,output能自定义类型,然后需定义成存储过程的变量,如 @out  varchar output)   
 <2> 不同点:
1.output是定义变量  
2.output没有return从查询或过程中无条件退出的工功    
3.return返回值在函数和过程定义时不需要用output来定义 
二、怎样在asp.net 中获取一个查询功能的存储过程的查询记录呢?
(1)执行一个没有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcedure";
da.selectCommand.CommandType = CommandType.StoredProcedure;

(2)执行一个有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcedure";
da.selectCommand.CommandType = CommandType.StoredProcedure;
若需要添加输入参数@Username:
param = new SqlParameter("@Username", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = username;
da.selectCommand.Parameters.Add(param);

若需要添加输出参数@out:
param = new SqlParameter("@out", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output; '输出参数
执行查询语句: comm.ExecuteNonQuery();
int Out=param.Value;

若要获得参储过程的返回值:@RETURN_VALUE是默认的返回参数
param = new SqlParameter("@RETURN_VALUE", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue; '返回值:

执行查询语句: comm.ExecuteNonQuery();
int Out=param.Value; //Out就是返回参数值

================


三、例子
    例1:   下面的存储过程实现用户验证的功能,如果不成功,返回0,成功则返回1.
CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
AS

IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)
SELECT @LEGAL = 1
ELSE
SELECT @LEGAL = 0

在程序中调用该存储过程,并根据@LEGAL参数的值判断用户是否合法。

.net 中显示返回值主要代码
comm.Parameters.Add("@LEGAL", 0);
comm.Parameters["@LEGAL"].Direction = ParameterDirection.Output;
comm.ExecuteNonQuery();    //ExecuteNonQuery:返回影响的行数
i = (int)comm.Parameters["@LEGAL"].Value;   
Response.Write(i.ToString());


例2:返回存储过程OUTPUT参复和RETURN返回值的原代码

ALTER PROCEDURE sp_2
@p int output,
@p1 int,
@p2 int
as
set @p = @p1+@p2
return 99

    SqlCommand cmd=new SqlCommand();
    cmd.Connection=conn;
    cmd.CommandText = "sp_2";
    cmd.CommandType = CommandType.StoredProcedure;
    '@return_value"这个参数在输入参数的最前面,名称是固定的
    SqlParameter param=cmd.CreateParameter("@return_value", adInteger, adParamReturnValue);
    cmd.Parameters.Add(param);
   '输入和输出的参数顺序同存储过程的参数顺序
    param=cmd.CreateParameter("@p", adInteger, adParamOutput);
    cmd.Parameters.Add(param);
    param= cmd.CreateParameter("@p1", adInteger, adParamInput,,1)
    cmd.Parameters.Add(param);
    param=cmd.CreateParameter("@p2", adInteger, adParamInput,,2)

    cmd.ExecuteNonQuery();
    For i = 0 To cmd.Parameters.Count - 1
     for( int i;i<cmd.Parameters.Count - 1,i++)
        Response.write(cmd.Parameters(i).Name & "=" & cmd.Parameters(i).Value)
      cmd.Connection.Close();

结果:
@return_value=99
@p=3
@p2=2
@p1=1 

四、如何在存储过程中调用存储过程?

create   table   test(id   int,name   varchar(10))   
  insert   into   test   select   1,'AAAA'   
  insert   into   test   select   2,'BBBB'   
  go       
  create   procedure   sp_test1(@count   int   output)   
  as   
          select   @count=count(*)   from   test   
  go       
  create   procedure   sp_test2   
  as   
  begin   
          declare   @count   int   
          exec   sp_test1   @count   output     
          select   @count   
  end   
  go    
  exec   sp_test2   
  go    
  --输出结果   
  /*   
  2   
  */   
    




你可能感兴趣的:(存储过程)