我在sql中使用 select * form table1 where a in ($P{param}) 传入一个字符串 "a,b,c " ireport 会认为参数是一个查询条件 而不是 多个
答:试试
select * form table1 where a in ($P!{param})
看,当然,传入参数不能是 "a,b,c ",而要是带上双引号,如 " / "a/ ", / "b/ " , / "c/ " ",不然拼出来的SQL就不对了。
三、使用参数:
参数$P{parameterName} 报表参数实现模糊查询(like , in 的时候)的两种方式:
1.在传递参数的首尾加上百分号:%param%
2.定义SQL语句时$P!{param}
第二种方式更为灵活
参数的引用方式有两种,,一种是$P{},另一种是$P!{},前者可以出现在任意的表达式位置,而后者则只能出现在SQL脚本里,用来替换查询语句,用以按照不同的需求替换查询语句。同时,在脚本里,也有些许区别:前者只能替换语句的部分字段,如SELECT * FROM bugs where name=$P{Name} order by proname, modulename,而对于$P!{},则可以直接在SQL脚本框里输入$P!{SQL}。
set nocount on
create table #
(
tables varchar(50), --表名称
mName varchar(20), --模块名称
psName varchar(20), --派出所名称
mlgName varchar(20), --用户名称
dtBegin varchar(20), --统计开始时间
dtEnd varchar(20), --统计结束时间
num int --数据量
)
declare @QueryStr varchar(5000) -- 表名称
declare @tables varchar(50) --表名称
declare @mName varchar(50) --模块名称
declare @dtBegin varchar(50) --模块名称
set @dtBegin=$P{dtBegin}
declare @dtEnd varchar(50) --模块名称
set @dtEnd=$P{dtEnd}
declare @psId varchar(50) --模块名称
set @psId=$P{psId}
declare @mLgName varchar(50) --模块名称
set @mLgName=$P{mLgName}
if ($P{mName}!='')
begin
declare cur_1 cursor for
select Models.mdName,sys.tables.name from sys.tables inner join Models
on models.intable=sys.tables.name and Models.mdId in ($P!{mName})
end
if ($P{mName} ='')
begin
declare cur_1 cursor for
select Models.mdName,sys.tables.name from sys.tables inner join Models
on models.intable=sys.tables.name
end
open cur_1
fetch next from cur_1 into @mName, @tables
while(@@FETCH_STATUS=0)
begin
-- insert into #
set @QueryStr='insert into #
select distinct '''+@tables+'''as 表名,'''+@mName+''' as 模块名,ps.psName as 派出所,m.mName as 用户名, '''+$P{mName}+''' as 开始时间,'''+@dtEnd+''' as 结束时间,
(select count(only) from '+@tables+' where Substring(only,18,6)=m.mLgName '
if (@dtBegin!='')
begin
set @QueryStr = @QueryStr + ' and modtime<=''' + Rtrim(@dtBegin) + ''''
end
if (@dtEnd!='')
begin
set @QueryStr = @QueryStr + ' and modtime>=''' + Rtrim(@dtEnd) + ''''
end
set @QueryStr = @QueryStr + ')as 记录数
from managers m,policestations ps ,peoples p where m.psId=ps.psId '
if (@psId!='')
begin
set @QueryStr = @QueryStr + ' and ps.psId in ( '''+@psId+''' )'
end
if (@mLgName!='')
begin
set @QueryStr = @QueryStr + ' and m.mLgName in ( '''+@mLgName+''' )'
end
print(@QueryStr)
Exec(@QueryStr)
fetch next from cur_1 into @mName, @tables
end
select * from #
drop table #
close cur_1
deallocate cur_1
还有个比较好的网址:http://www.javaworld.com.tw/jute/post/view?bid=11&id=201906&tpg=2&ppg=1&sty=0&age=0