ireport中sql语句中in条件问题

来源:互联网 发布:莫比乌斯韩国电影知乎 编辑:程序博客网 时间:2024/06/07 17:36

我在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
原创粉丝点击