下面是一段SQL模糊查询的存储过程
ALTER proc proDemo
@name nchar(20)
as
select * from DemoLogin where UserName like '%'+(@name)+'%'表里面有一个数据 内容是admin在调用存储过程的时候
exec proDemo 'ad' 根本就查不到数据
exec proDemo 'admin' 这样可以查到,
也就是说它根本就没有实现模糊查询的功能。不知道这是为什么? 如果把存储过程改成下面的那样那一切就正常了。
ALTER proc proDemo
@name nchar(20)
as
select * from DemoLogin where UserName like '%'+rtrim(@name)+'%'
难道和空格我什么关系吗?

解决方案 »

  1.   

    和空格当然有关系的呀,建议改为:
    select * from DemoLogin where UserName like '%'+trim(@name)+'%'
      

  2.   

    ALTER proc proDemo
    @name nchar(20)
    as
    select * from DemoLogin where UserName like '%'+(@name)+'%'去掉'()'-->ALTER proc proDemo
    @name nchar(20)
    as
    select * from DemoLogin where UserName like '%'+@name+'%'
      

  3.   

    SELECT CASE WHEN 'admin' LIKE '%admin %' THEN 1 ELSE 0 END 
    SELECT CASE WHEN 'admin' LIKE '% admin%' THEN 1 ELSE 0 END
    SELECT CASE WHEN 'admin' LIKE '%admin%' THEN 1 ELSE 0 END  
    /*
    ----------- 
    0(所影响的行数为 1 行)            
    ----------- 
    0(所影响的行数为 1 行)            
    ----------- 
    1
    */
      

  4.   


    兄弟,我说的是存储过程 ,不是SQL语句,SQL语句那样写是正确的,但是存储过程里面定义了@name nchar(20)。
      

  5.   

    因为你的参数是nchar(20)类型的,所以当你传入的参数不足10个字符时,系统会自动以空格补齐。把参数换成 nvarchar(20)应该就可以了。