MS-SQL存储过程使用的几点(收集)
2009-08-25 17:43
399 查看
一、存储过程return与output区别
<1> 共同点:都能返回值(但return只能返回int类型,output能自定义类型,然后需定义成存储过程的变量,如 @out varchar output)
<2> 不同点:
例1: 下面的存储过程实现用户验证的功能,如果不成功,返回0,成功则返回1.
例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
*/
<1> 共同点:都能返回值(但return只能返回int类型,output能自定义类型,然后需定义成存储过程的变量,如 @out varchar output)
<2> 不同点:
1.output是定义变量
2.output没有return从查询或过程中无条件退出的工功
3.return返回值在函数和过程定义时不需要用output来定义
二、怎样在asp.net 中获取一个查询功能的存储过程的查询记录呢?2.output没有return从查询或过程中无条件退出的工功
3.return返回值在函数和过程定义时不需要用output来定义
(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就是返回参数值
================
三、例子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());
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
*/
相关文章推荐
- MS-SQL存储过程的使用
- MS SqlServer海量数据分页存储过程收集
- MS SqlServer海量数据分页存储过程收集
- 收集到的:如何调用存储过程,有返回值的,有参数的,存储过程中调用存储过程。(MS SQL Server)
- MS SqlServer海量数据分页存储过程收集
- MS SqlServer海量数据分页存储过程收集
- 分页存储过程(五)在MS SQL Server中打造更加准确,且有一点效率提升的的分页结果
- sql存储过程传多个id查询,使用in
- SQL存储过程的游标使用
- 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
- 创建procedure (SQL存储过程的介绍, 建立和使用方法)
- 使用Windows 命令行压缩程序 Winrar,在SQL存储过程中压缩Excel文件
- sql存储过程中使用 output
- SQL 用户定义表类型,在存储过程里使用数据类型作参数
- MS SQL Server 2005 通用分页存储过程
- SQL存储过程如何使用IN关键字
- 使用 Navicat 8 给 MySQL 写存储过程的几点注意
- 如何使用SQL语句 查看存储过程的内容
- SQL 使用系统存储过程实现的通用分页存储过程
- MS SQL Server 2005 分页存储过程