declare @Sql varchar(1000)
declare @ACCOUNT varchar(50)='-1'  --@ACCOUNT 为 testName 时也需要符合
Set @Sql ='select * from T_ORDER where   ('+CASE @ACCOUNT WHEN '-1' THEN '1=1' ELSE 'ACCOUNT = '''+CAST(@ACCOUNT AS varchar(50)) END+''') '
select @Sql
希望高手能执行下以上这段SQL,当我传入-1时候,打印出来多一个单引号,求解阿。如果把 ACCOUNT = '''+CAST(@ACCOUNT AS varchar(50)) END+'''变成  ACCOUNT = '+CAST(@ACCOUNT AS varchar(50)) END+' 传入-1是对了,但是传入字符串用户名又缺少了单引号,在线求解~~

解决方案 »

  1.   


    declare @Sql varchar(1000)
    declare @ACCOUNT varchar(50)='-1'  --@ACCOUNT 为 testName 时也需要符合
    Set @Sql ='select * from T_ORDER where   ('+CASE @ACCOUNT WHEN '-1' THEN '''' ELSE 'ACCOUNT = '''+CAST(@ACCOUNT AS varchar(50)) END+''') '
    select @Sql
      

  2.   

    就是拼接字符串,参数为string.
      

  3.   

    declare @Sql varchar(1000)
    declare @ACCOUNT varchar(50)  --@ACCOUNT 为 testName 时也需要符合
    set @ACCOUNT='-1'
    Set @Sql ='select * from T_ORDER where   ('+CASE @ACCOUNT WHEN '-1' THEN '1=1' ELSE 'ACCOUNT = '''
                        +CAST(@ACCOUNT AS varchar(50)) END+') '
    select @Sql
      

  4.   

    declare @Sql varchar(1000)
    declare @ACCOUNT varchar(50)  --@ACCOUNT 为 testName 时也需要符合
    set @ACCOUNT='-1'
    Set @Sql ='select '+case @ACCOUNT WHEN '-1' THEN '''''' else + '*' end +' from T_ORDER where   ('+CASE @ACCOUNT WHEN '-1' THEN '1=1' ELSE 'ACCOUNT = '''
                        +CAST(@ACCOUNT AS varchar(50)) END+') '
    select @Sqltry
      

  5.   

    declare @Sql varchar(1000)
    declare @ACCOUNT varchar(50)='-1'  --@ACCOUNT 为 testName 时也需要符合
    Set @Sql ='select * from T_ORDER where ('+CASE @ACCOUNT WHEN '-1' THEN ' 1=1 ' ELSE ' ACCOUNT = '''+CAST(@ACCOUNT AS varchar(50))+'''' END +')' 
    select @Sql