if (xuanze = "1") then
clause = clause & " and (R_NAME LIKE '%"&Pr_name&"%' or R_ID="&Pr_name&")"
end if
select R_ID,a.SB,R_NAME,DETAIL,R_FACTORY,R_SUPPLIER,R_PHONE,(b.SMALLTYPE)c,a.SMALLTYPE,Isnull((select top 1 PID from PHOTOLIST where PHOTOLIST.R_ID=ROWNAME.R_ID),0)PID from ROWNAME left join TYPELIST a on ROWNAME.R_SORT=a.SB left join TYPELIST b on ROWNAME.MEASURE=b.SB where 1=1 "& clause &" order by R_ID DESCR_NAME为字符型 R_ID为INT型字段
当变量Pr_name为数字的时候有就结果,Pr_name为字符的时候就没有结果这是为什么?

解决方案 »

  1.   


    select R_ID,a.SB,R_NAME,DETAIL,R_FACTORY,R_SUPPLIER,R_PHONE,(b.SMALLTYPE)c,a.SMALLTYPE,
    Isnull((select top 1 PID from PHOTOLIST where PHOTOLIST.R_ID=ROWNAME.R_ID),0)PID from ROWNAME 
    left join TYPELIST a on ROWNAME.R_SORT=a.SB left join TYPELIST b on ROWNAME.MEASURE=b.SB 
    where 1=1 and (R_ID=268 or R_NAME LIKE '%羊毛%') order by R_ID DESC
    吧clause 直接用数据代替掉则可以找到数据这是为什么?
    结果
    R_ID SB R_NAME DETAIL R_FACTORY R_SUPPLIER R_PHONE c SMALLTYPE PID
    269 2a1 4寸羊毛刷 0 0 把 油漆 0
    268 2a4 铜锁 0 0 把 铜配件 0
      

  2.   

    clause = clause & " and (R_NAME LIKE '%"&Pr_name&"%' or R_ID="&Pr_name&")"
    这里已经加了%的
      

  3.   

    把下列打印出来看看,我怀疑Pr_name的值前后有空格之类的。
    clause = clause & " and (R_NAME LIKE '%"&Pr_name&"%' or R_ID="&Pr_name&")"
      

  4.   

    sql server不是用"(双引号)的.是'(单引号)而且变量是以@开头的.
      

  5.   

    VB执行的时候将你的查询内容赋予一个文本 如
    text1.text=clause
    看看这个值是否有语法 或逻辑错误
      

  6.   

    因为是ASP写的程序所以变量在"&&"里
      

  7.   

    clause 打印出后来变成了 and (R_NAME LIKE '%羊毛%' or R_ID=羊毛)R_ID=羊毛错了!  R_ID是int
      

  8.   

    clause = clause & " and (R_NAME LIKE '%"&Pr_name&"%' or CONVERT(char(20), R_ID)='"&Pr_name&"')"
    这样就可以了
      

  9.   

    建议你别用char(20), 这是固定长度的,长度达不到的话,后面会以空格补充。
    用varchar(20)。
      

  10.   

    --这里写的也不对,怎么会让R_ID='"&Pr_name&"'  ????or CONVERT(char(20), R_ID)='"&Pr_name&"'