存储过程

存储过程必须是批处理中仅有的语句

语法:

Go   

create  Procedure  存储过程名

   @参数名  参数类型(int,string...)

   as

       if(@参数名)

           select @参数名=count(*) from 表名  where  ...

        else

            set @参数名=1000

 Go

1.只返回单一记录集的存储过程

复制代码
create Procedure GetUserAccount
as
select * from UserAccount
go

-------------执行上面的存储过程----------------
exec GetUserAccount

--相当于执行了select 语句,返回数据集
复制代码

2、没有输入输出的存储过程

复制代码
create Procedure inUserAccount
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(9,9,'2013-01-02',9)
go

-------------执行上面的存储过程----------------

exec inUserAccount
--修改和插入都只是执行操作,不会返回任何数据
复制代码

3、有返回值的存储过程

复制代码
create Procedure inUserAccountRe
as
insert into UserAccount (UserName,[PassWord],RegisterTime,RegisterIP) values(10,10,'2013-01-02',10)
return @@rowcount
go

-------------执行上面的存储过程----------------

exec inUserAccountRe
--返回执行多少行
复制代码

4、有输入输出参数的存储过程

复制代码
create Procedure GetUserAccountRe
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
go

-------------执行上面的存储过程----------------

exec GetUserAccountRe '7',null
复制代码

5、同时具有返回值、输入参数、输出参数的存储过程

复制代码
create Procedure GetUserAccountRe1
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
return @@rowcount
go

exec GetUserAccountRel '7' ,null
复制代码

6、同时返回参数和记录集的存储过程

复制代码
create Procedure GetUserAccountRe2
@UserName nchar(20),
@UserID int output
as
if(@UserName>5)
select @UserID=COUNT(*) from UserAccount where UserID>25
else
set @UserID=1000
select * from UserAccount
return @@rowcount
go
复制代码

7、返回多个记录集的存储过程

复制代码
create Procedure GetUserAccountRe3
as
select * from UserAccount
select * from UserAccount where UserID>5
go

-------------执行上面的存储过程----------------

exec GetUserAccountRe3
复制代码

后台调用存储过程的代码  (仅作为参考)

复制代码
 //同时具有返回值、输入参数、输出参数的存储过程GetUserAccountRe1
        public void runGetUserAccountRe1()
        {
            SqlCommand cmd = common("GetUserAccountRe1");
            // 创建参数 
            IDataParameter[] parameters = { 
                 new SqlParameter("@UserName", SqlDbType.NChar,20) , 
                 new SqlParameter("@UserID", SqlDbType.Int) ,
                 new SqlParameter("rval", SqlDbType.Int,4) 
             };
            // 设置参数类型 
            parameters[0].Value = "7";
            parameters[1].Direction = ParameterDirection.Output;  // 设置为输出参数 
            parameters[2].Direction = ParameterDirection.ReturnValue;  //设置为返回值
            // 添加参数 
            cmd.Parameters.Add(parameters[0]);
            cmd.Parameters.Add(parameters[1]);
            cmd.Parameters.Add(parameters[2]);
            con.Open();
            // 执行存储过程并返回影响的行数 
            Label1.Text = cmd.ExecuteNonQuery().ToString();
            con.Close();
            // 显示影响的行数和输出参数 
            Label1.Text += "-输出参数为:" + parameters[1].Value.ToString();
            Label1.Text += "-返回值为:" + parameters[2].Value.ToString();

        }
复制代码

引用地址:http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html

posted @   zmztyas  阅读(298)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示