有一存储过程 穿两个参数,第二个参数是放在where里的ALTER PROCEDURE [dbo].[P]
@var1 varchar(32)='',
@var2 varchar(1024)=''
AS
BEGIN
select count(*) from Q
    WHERE CD LIKE left(@var1,2)+'%00' AND IS IN(-1, 2)  + @var2  
END@var2是可以不填写的,填写传入的时候是and 字段=值,IS类型为varchar,但是放在IS后面报错,如果这样放置
 WHERE CD LIKE left(@var1,2)+'%00'  + @var2  AND IS IN(-1, 2) 
这样是可以 但是查出来是0

解决方案 »

  1.   


    WHERE CD LIKE left(@var1,2)+'%00' AND [IS] IN('-1'+@var2,'2'+@var2)
      

  2.   


    IS 是一个字段 @var2也是一个字段不能加在哪个位置
    @var2是传进来可能是 and 字段=值
      

  3.   

    看了下,语句没问题,报错内容贴出来看看?
    另外建议LZ字段名字别起什么IS、CD这种让人容易误解的名字!尤其是IS!
      

  4.   


    ALTER PROCEDURE [dbo].[P]
        @var1 varchar(32)='',
        @var2 varchar(1024)=''
    AS
    BEGIN
    declare @sql varchar(8000)
        set @sql = 'select count(*) from Q
    WHERE CD LIKE left('''+@var1+''',2)+''%00'' AND IS IN(-1, 2)'  + @var2  
    exec(@sql)
    END