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满足数字和,的格式哦
varchar 用过了,就像上面讲的:@companyname 如果改成varchar 也不行,提示:将 varchar 值 '350,657' 转换为数据类型为 int 的列时发生语法错误。
--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
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
(
@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满足数字和,的格式哦
改一下这里就行了
int类型改为varchar或nvarchar
(
@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
(
@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