and gsid in (case when @companyname is null then gsid else @companyname end)主要是修改上面这句,不知道如何去改了,一点儿思路都没有了

解决方案 »

  1.   

    CREATE proc xxxx
    (
    @companyname varchar(1000))
    as
    beginselect 公司id,gsid,公司名称,sum(金额) as 用款总额 from 
    (
                       select * from a
                       union all
                       select * from b
    ) t 
    where 审批意见='同意'
    and gsid in (case when @companyname is null then gsid else @companyname end)
    group by 公司id,gsid,公司名称 order by 公司idend
    GO这样不就好了?要在应用程序中过滤字符,以保证companyname满足数字和,的格式哦
      

  2.   

    varchar 用过了,就像上面讲的:@companyname 如果改成varchar 也不行,提示:将 varchar 值 '350,657' 转换为数据类型为 int 的列时发生语法错误。
      

  3.   

    @companyname int=null--这里不知道要如何改,改成什么类型的
    改一下这里就行了
    int类型改为varchar或nvarchar
      

  4.   

    --tryCREATE proc xxxx
    (
    @companyname varchar(200)=null--这里不知道要如何改,改成什么类型的
    )
    as
    begindeclare @sql varchar(8000)
    set @sql='
    select 公司id,gsid,公司名称,sum(金额) as 用款总额 from 
    (
                       select * from a
                       union all
                       select * from b
    ) t 
    where 审批意见=''同意''
    '
    if @companyname is not null
    set @sql=@sql+' and gsid in('+@companyname+')'set @sql=@sql+'
     group by 公司id,gsid,公司名称 
     order by 公司id
    'exec(@sql)
    end
    GO
      

  5.   

    CREATE proc xxxx
    (
    @companyname nvarchar(1000)=''--这里不知道要如何改,改成什么类型的
    )
    as
    beginselect 公司id,gsid,公司名称,sum(金额) as 用款总额 from 
    (
                       select * from a
                       union all
                       select * from b
    ) t 
    where 审批意见='同意'
    and ','cast(gsid as nvarchar(16))+',' in (case when @companyname ='' then ','cast(gsid as nvarchar(16))+',' else ','+@companyname+',' end)
    group by 公司id,gsid,公司名称 order by 公司idend
    GO