exec AdvanceSearch ' where p.Status = 1 and  (  ( p.ProductID like ''%护肤%''
                                        or p.ProductName like ''%护肤%''
                                        or p.ProductWebName like ''%护肤%''
                                        or p.Keywords like ''%护肤%''
                                        or m.BrandName like ''%护肤%''
                                        or c3.C3Name like ''%护肤%'' ) or  ( p.ProductID like ''%美白%''
                                        or p.ProductName like ''%美白%''
                                        or p.ProductWebName like ''%美白%''
                                        or p.Keywords like ''%美白%''
                                        or m.BrandName like ''%美白%''
                                        or c3.C3Name like ''%美白%'' )) and  1 = 1  and  1 = 1 and c2.SysNo = 9',' Order by pe.isstockout',12,0
报错
消息 102,级别 15,状态 1,第 26 行
'and' 附近有语法错误。  
注:这里的26行就是or c3.C3Name like ''%美白%'' )) and  1 = 1  and  1 = 1 and c2.SysNo =这行
如果把and  1 = 1去掉一个就不会有问题了,或者把这一行前面的空格全部去掉就不会有问题了,去掉之后如下exec AdvanceSearch ' where p.Status = 1 and  (  ( p.ProductID like ''%护肤%''
                                        or p.ProductName like ''%护肤%''
                                        or p.ProductWebName like ''%护肤%''
                                        or p.Keywords like ''%护肤%''
                                        or m.BrandName like ''%护肤%''
                                        or c3.C3Name like ''%护肤%'' ) or  ( p.ProductID like ''%美白%''
                                        or p.ProductName like ''%美白%''
                                        or p.ProductWebName like ''%美白%''
                                        or p.Keywords like ''%美白%''
                                        or m.BrandName like ''%美白%''
or c3.C3Name like ''%美白%'' )) and  1 = 1  and  1 = 1 and c2.SysNo = 9',' Order by pe.isstockout',12,0
,很是奇怪,
参数是在存储过程里拼接sql语句执行的条件

解决方案 »

  1.   

    这个我觉得不是少空格的原因吧,我很奇怪sqlserver为什么会这样,我把前面空的内容去掉它就没错了,很是纳闷
      

  2.   

    exec AdvanceSearch 
    ' where p.Status = 1 and 
    (
    (
     p.ProductID like ''%护肤%''
     or p.ProductName like ''%护肤%''
     or p.ProductWebName like ''%护肤%''
     or p.Keywords like ''%护肤%''
     or m.BrandName like ''%护肤%''
     or c3.C3Name like ''%护肤%'' 
    ) or  

     p.ProductID like ''%美白%''
     or p.ProductName like ''%美白%''
     or p.ProductWebName like ''%美白%''
     or p.Keywords like ''%美白%''
     or m.BrandName like ''%美白%''
     or c3.C3Name like ''%美白%'' )

    ) --貌似这里少了个 )
    and 1 = 1 and 1 = 1 and c2.SysNo = 9 ' , 
    ' Order by pe.isstockout',
    12,
    0
      

  3.   

    因为这个条件是程序生成的,当程序里全部不满足的时候我就加上1=1,不然前面的and就多出来了,我觉得1=1多加也不会有这个问题啊,空格我全部换成tab了还是没用
      

  4.   

    五楼是告诉你那里好象少了个扩号,你不能完全照般.exec AdvanceSearch 
    ' where p.Status = 1 and 
    (
    (
     p.ProductID like ''%护肤%''
     or p.ProductName like ''%护肤%''
     or p.ProductWebName like ''%护肤%''
     or p.Keywords like ''%护肤%''
     or m.BrandName like ''%护肤%''
     or c3.C3Name like ''%护肤%'' 
    ) or  

     p.ProductID like ''%美白%''
     or p.ProductName like ''%美白%''
     or p.ProductWebName like ''%美白%''
     or p.Keywords like ''%美白%''
     or m.BrandName like ''%美白%''
     or c3.C3Name like ''%美白%'' )


    and 1 = 1 and 1 = 1 and c2.SysNo = 9 ' , 
    ' Order by pe.isstockout',
    12,
    0
      

  5.   

    两个 1=1,是不是多余了,还是你动态拼接过来的。
    你把版式排得很好,同时也把SQL加长了。
    把你的sql先输出,print @sql.
    是不是把结尾删除部分?
    注意空格,tab也算一个字符的
      

  6.   

    是动态拼接起来的,加tab应该不会有问题吧,我以前都是加tab的,其实sql多几个tab的话长了几个字符应该对性能不会有影响的吧,我很奇怪为什么会这样,搞不清楚原因心里很不舒服。