我输入的用户名要求是半角的英文,数字,但必须是6位的  
IF (PATINDEX('%[^a-zA-Z]%',@prmUserId) > 0) or (LEN(@prmUserId) != 6) BEGIN
我是这样判断的当我在测试的时候,输入的@prmUserId为uuuuu8(6位的)是不报错,输入8888888(7位)或者uuuuuuu是也不报错
是不是LEN那地方出错了啊奇怪了 ,但测试uuuuu(5位)或者88888(5位)就报错

解决方案 »

  1.   

    declare @prmUserId varchar(15)
    set @prmUserId ='8888888'
    IF (PATINDEX('%[^a-zA-Z]%',@prmUserId) > 0) and (LEN(@prmUserId) = 6) 
       print 'OK'
    else
       print 'ERROR'/*
    ERROR*/
      

  2.   

    IF (PATINDEX('%[^a-zA-Z0-9]%',@prmUserId) > 0) or (DATALENGTH(@prmUserId) != 6) OR (DATALENGTH(@prmUserId)<>LEN(@prmUserId))
      

  3.   

     不等于的符号  <>  
      

  4.   

    我觉得这个问题在于patindex这个的问题 “返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。”msdn上是这么说的 
    现在要是不判全角还是半角,直接判断是不是英文或者数字就可以 
      

  5.   

    现在我觉得是len那判断有问题 真是怪事了 啊 
      

  6.   

    IF (PATINDEX('%[^a-zA-Z0-9]%',@prmUserId) > 0) or (DATALENGTH(@prmUserId) != 6) 
     咋个不好用?不判断全半角去掉后面的or--上面是不符合条件的,符合条件的加not
    IF PATINDEX('%[^a-zA-Z0-9]%',@prmUserId)= 0 and DATALENGTH(@prmUserId)= 6
      

  7.   

    我没用not,直接改了也是可以的,DATALENGTH都改为len
      

  8.   

    不等于的符号 <>  
      

  9.   

    IF (PATINDEX('%[^a-zA-Z0-9]%',@prmUserId) > 0) or (LEN(@prmUserId) != 6) BEGIN
        select @wrkErType      = 1                                , 
               @wrkErSts       = 999999                           ,
               @wrkTblID       = 'PARAM'                          , 
               @wrkErkey1      = CAST(@prmUserId AS varchar(20))  ,
               @wrkErMsg       = 'ERROR',            
           @wrklgRetMode   = 1                  
        GOTO ERROR_PROC
    END
    我就是这么写的啊 ,当执行我这个存储过程的时候,输入,@prmUserId值的时候就出现我上面所说的问题了 
    @prmUserId char(06)
      

  10.   

    报什么错,你始终不肯贴出来。是不是你定义@prmUserId时已经定义了长度为6