create proc p_update_userpwd(
@uname  varchar(50),    --用户名
@oldpwd varchar(50),    --旧密码
@newpwd varchar(50),    --新密码
@outstr varchar(50)output)  --操作状态标识符
as
begin
declare @uoldpwd varchar(50) --获取查询后的用户密码
select @uoldpwd=users_pwd from t_user where users_name=@uname
if @uoldpwd!=@oldpwd
set @outstr=1 --查询后 用户输入的原始密码不正确
else
update t_user set users_pwd=@newpwd where users_name=@uname
set @outstr=0 --
end if
end;这是我的存储过程代码
目的就是 更改用户密码 
1、先去获得原有密码 
2、比较用户输入的旧密码与数据库的是否一样
3、如果不一样 输出参数赋值 1 
4、如果一样 输出参数赋值  0
结束。
但是系统总是提示我 最后一句 end 有错误 
实在找不到
请教高手

解决方案 »

  1.   

    --怎么会有END IF?
    create proc p_update_userpwd( 
    @uname  varchar(50),    --用户名 
    @oldpwd varchar(50),    --旧密码 
    @newpwd varchar(50),    --新密码 
    @outstr varchar(50)output)  --操作状态标识符 
    as 
    begin 
    declare @uoldpwd varchar(50) --获取查询后的用户密码 
    select @uoldpwd=users_pwd from t_user where users_name=@uname 
    if @uoldpwd!=@oldpwd 
    set @outstr=1 --查询后 用户输入的原始密码不正确 
    else 
    update t_user set users_pwd=@newpwd where users_name=@uname 
    set @outstr=0 -- end; 
      

  2.   

    如果我希望执行 
                    if   @uoldpwd!=@oldpwd  
                    set @outstr=1 
    这句以后 直接跳出存储过程 怎么写?
      

  3.   

    BEGIN TRAN标记事务开始 COMMIT TRAN 提交事务
      

  4.   

    我还想问一下  我现在的存储过程 全都是在 sql2005中 写的 我想在 vs2008中单步调式这些代码
    但是现在出现了个问题我以前使用vs2005时 都是可以对存储过程进行 单步跟踪调试 
    但是在2008里 每次我选择单步执行存储过程 系统一下就执行完了,根本不管我有没有断点 
    不知道为什么 希望大家帮忙
      

  5.   

    把end后的if去掉..........create proc p_update_userpwd( 
    @uname  varchar(50),    --用户名 
    @oldpwd varchar(50),    --旧密码 
    @newpwd varchar(50),    --新密码 
    @outstr varchar(50)output)  --操作状态标识符 
    as 
    begin 
    declare @uoldpwd varchar(50) --获取查询后的用户密码 
    select @uoldpwd=users_pwd from t_user where users_name=@uname 
    if @uoldpwd!=@oldpwd 
    set @outstr=1 --查询后 用户输入的原始密码不正确 
    else
    begin 
    update t_user set users_pwd=@newpwd where users_name=@uname 
    set @outstr=0
    end
    end
      

  6.   

    drop table t_user;
    create table t_user(users_name varchar(20), users_pwd varchar(30));insert into t_user(users_name,users_pwd)
    select
    'luoyoumou','hao123' union all select
    'huajianguo','hll1234';
    ---------------------------------------------------create proc p_update_userpwd( 
    @uname  varchar(50),    --用户名 
    @oldpwd varchar(50),    --旧密码 
    @newpwd varchar(50),    --新密码 
    @outstr varchar(50)output)  --操作状态标识符 
    as 
    begindeclare @uoldpwd varchar(50) --获取查询后的用户密码 
    select @uoldpwd=users_pwd from t_user where users_name=@uname 
    if @uoldpwd!=@oldpwd 
    set @outstr=1 --查询后 用户输入的原始密码不正确 
    else 
    update t_user set users_pwd=@newpwd where users_name=@uname 
    set @outstr=0 -- print (@outstr)
    end/*
    exec p_update_userpwd 'luoyoumou','hao123','888888',''
    */
      

  7.   

    drop table t_user;
    create table t_user(users_name varchar(20), users_pwd varchar(30));insert into t_user(users_name,users_pwd)
    select
    'luoyoumou','hao123' union all select
    'huajianguo','hll1234';
    ---------------------------------------------------alter proc p_update_userpwd( 
    @uname  varchar(50),    --用户名 
    @oldpwd varchar(50),    --旧密码 
    @newpwd varchar(50),    --新密码 
    @outstr varchar(50)output)  --操作状态标识符 
    as 
    begindeclare @uoldpwd varchar(50) --获取查询后的用户密码 
    select @uoldpwd=users_pwd from t_user where users_name=@uname 
    if @uoldpwd!=@oldpwd 
    set @outstr=1 --查询后 用户输入的原始密码不正确 
    else
    begin 
    update t_user set users_pwd=@newpwd where users_name=@uname 
    set @outstr=0 -- 
    end
    print (@outstr)
    end/*
    exec p_update_userpwd 'luoyoumou','hao123','888888',''
    */