/*
Fun : 用户登陆验证.若密码加密,则由客户端实现
Author : **
CreateTime : 2005-12-23
*/CREATE PROCEDURE pro_UserCheck
         @userID           as varchar(50),
         @passWord         as varchar(50),
         @sort             as int,
          
       
         
         @addr       as varchar  output,
         @phone      as varchar output,
         @userState  as int output,
         @userSort   as int output,  
         @rpt        as int output                     --0为登陆失败,1为登陆成功 AS
Begin 
           Select @userSort = UserSort,@userState=UserState,@addr=Addr,@phone=Phone
           From tbl_UserInfo
           Where UserID = @userID
                 And [Password] = @passWord
                 And (UserState = 2 or UserState = 1)           --2为通过审核并且帐号启用
         --And userSort=@sort
         And userSort<>3
                    
                 IF @@rowcount <=0 
                 Begin
                       Set @rpt =0
                 End
                 Else
                 Begin
                       IF ISNULL(@addr,'') = '' or ISNULL(@phone,'') = ''
                       Begin
                          Set @rpt=0
                       End
                       Else
                       Begin
                           update tbl_userInfo set userstate=1  Where UserID = @userID
                          Set  @rpt=1
                        End   
                             
                       
                End
 End
GO
写这个存储过程的主要功能是判断Addr和Phone是否为空,如果为空登录失败,功能是大致实现了,但当Addr和Phone输入为汉字时,程序还是默认为空,不知道是什么问题?

解决方案 »

  1.   

    @addr       as varchar  output,
    @phone      as varchar output,
    varchar 声明的问题
      

  2.   

             @addr       as varchar  output,
             @phone      as varchar output,varchar  换  varchar(1000) 或者 nvarchar(1000)  试试!
      

  3.   

    你的"输入为汉字"是什么意思?
    不会是在登录时还要输入addr和phone吧?
    你的@addr和@phone都设置成output型,而且是在查询时由数据表中获取值,如果数据表中本来就为空,那在执行这个过程时,表中的值是不会变的,即使你把这两个参数用实际值带进去,而且还与它是否为中文毫无关系.
      

  4.   

    没有长度默认为1, 1个汉字要varchar(2)
      

  5.   

    谢谢 楼上各位 确实是varchar声明的问题  分平分了