严重: Servlet.service() for servlet jsp threw exception
com.microsoft.sqlserver.jdbc.SQLServerException: '@aParamno' 附近有语法错误。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:786)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:685)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:620)
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
at $java.sql.Statement$$EnhancerByProxool$$fb0001d5.executeQuery(<generated>)
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:440)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463)
at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:494)
at org.apache.jsp.base.his_005fdictinfo_005flist_005fjson_005ftest_jsp._jspService(his_005fdictinfo_005flist_005fjson_005ftest_jsp.java:143)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ncyl.common.filter.SessionValidFilter.doFilter(SessionValidFilter.java:150)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    SQL语句如下:
    String sql = "DECLARE @lACF01 int, @lBDO01 int, @lSql varchar(100)"+
        "DECLARE @lBDA01 varchar(10), @lBCK01 int, @lDate Datetime"+
        "declare @aParamno varchar(10),@aParam1 varchar(10)"+
        "SET @lACF01 = 2"+
        "SET @lBDO01 = "+code+
        "SET @lBDA01 = '1'"+
        "SET @lBCK01 = 15"+
    "Set @lDate = Convert(varchar(10),Getdate(),21)+' 23:59:59.999'"+
    "set @aParamno = dbo.GetSysParamValue(9999,9999,15)"+
    "set @aParam1 = dbo.GetSysParamValue(9999,9999,1)"+
    "declare @tmpBAU table(BCK01 int,ACF01 int)"+
    "if @aParamno <> '1' begin"+
      "insert into @tmpBAU(BCK01,ACF01)"+
      "select BCK01,ACF01 from baz1 where bau01 in ('51','52','53')"+
       "SELECT d.BBY04 as BBX04,d.BBY05 BBX05,d.BBY08,d.BBY06,f.AAS02"+
       ",h2.BCK03,Isnull(b.BAP02,'')+Isnull(c.BAG11,'') as NBBX13"+
        ",CASE WHEN @lACF01=1 THEN d.BBY25*c.BAG05 ELSE d.BBY25*c.BAG07 END AS Price"+
        ",CASE WHEN @lACF01 = 1 THEN ISNULL(h1.LSQty,0)/c.BAG05 ELSE ISNULL(h1.LSQty,0)/c.BAG07 END AS amount"+
       "FROM BBX1 a"+
      "JOIN BBT1 b ON a.BBX01 = b.BBX01"+
      "JOIN BAG1 c ON b.BBX01 = c.BBX01"+
      "JOIN BBY1 d ON c.BBY01 = d.BBY01"+
      "JOIN BDA1 e ON a.BDA01 = e.BDA01"+
       "JOIN BBJ1 h ON d.BBY01 = h.BBY01"+
      "left JOIN V_DPK6 h1 ON h.BBY01 = h1.BBY01 AND h.BCK01B = h1.BCK01 and h1.ACF01 in (3,@lACF01)"+
      "left join BCK1 h2 on h2.BCK01 = h1.BCK01"+
      "LEFT JOIN AAS1 f ON f.AAS01 = d.AAS01"+
      "left join BCG1 f1 on f1.BCG01 = d.BCG01"+
       "WHERE ((@lBDO01>-1 AND a.BDO01 = @lBDO01)OR(@lBDO01=-1 AND a.BDA01=@lBDA01))"+
       "and ((@aParam1 = '1') or (@aParam1 <> '1' and ISNULL(h1.LSQty,0)>0))"+
      "AND h.BCK01A = @lBCK01 AND a.BDA01 < '4' And @lDate < d.BBY31"+
       "and exists(select * from @tmpBAU h3 where h3.BCK01 = h.BCK01B and h3.ACF01 in (3,@lACF01))"+
      "AND d.ACF01 in (3,@lACF01) AND (d.BBY04 LIKE @lSql OR "+
      "(EXISTS(SELECT g.* FROM BCL1 g WHERE g.BBY01 = d.BBY01"+
      "AND (g.BCL03 LIKE @lSql OR g.ABBRP LIKE @lSql OR g.ABBRW LIKE @lSql))))"+  
    "end"+
    "else"+
    "begin"+
      "SELECT e.BDA01, e.BDA02,f.AAS02"+
      ", a.BBX01, a.BDO01, d.BBY04 as BBX04, d.BBY05 BBX05"+
      " , a.BDG02, Isnull(b.BAP02,'')+Isnull(c.BAG11,'') as NBBX13, b.BBT10, b.BBT11 "+
        ", d.BBY06, d.BBE02, d.BBY01,d.BBY08,c.BAG27"+
       " , CASE WHEN @lACF01=1 THEN c.BDG02A ELSE c.BDG02B END AS NUnit"+
      " , CASE WHEN @lACF01=1 THEN d.BBY25*c.BAG05 ELSE d.BBY25*c.BAG07 END AS Price"+
       " , CASE WHEN @lACF01 = 1 THEN ISNULL(h1.LSQty,0)/c.BAG05 ELSE ISNULL(h1.LSQty,0)/c.BAG07 END AS amount"+
       " ,'' BCK03 , f1.BCG02"+
      "FROM BBX1 a"+
      "JOIN BBT1 b ON a.BBX01 = b.BBX01"+
      "JOIN BAG1 c ON b.BBX01 = c.BBX01"+
      "JOIN BBY1 d ON c.BBY01 = d.BBY01"+
       "JOIN BDA1 e ON a.BDA01 = e.BDA01"+
       "left JOIN V_DPK6 h1 ON h1.BBY01 = d.BBY01"+
       "LEFT JOIN AAS1 f ON f.AAS01 = d.AAS01"+
      "left join BCG1 f1 on f1.BCG01 = d.BCG01"+
       "WHERE ((@lBDO01>-1 AND a.BDO01 = @lBDO01)OR(@lBDO01=-1 AND a.BDA01=@lBDA01))"+
      "  and ((@aParam1 = '1') or (@aParam1 <> '1' and ISNULL(h1.LSQty,0)>0))"+
      "  AND a.BDA01 < '4' And @lDate < d.BBY31    "+
      "  AND d.ACF01 in (3,@lACF01) AND (d.BBY04 LIKE @lSql OR "+
      "  (EXISTS(SELECT g.* FROM BCL1 g WHERE g.BBY01 = d.BBY01"+
      " AND (g.BCL03 LIKE @lSql OR g.ABBRP LIKE @lSql OR g.ABBRW LIKE @lSql)))) "+ 
    "end";
      

  2.   

    SQL语句在SQL Server Mannagement Studio中可以正常运行,结果如下:
    1000011 林可霉素利多卡因凝胶 瓶 10g 自费 西药房 合剂国产 1.2000000000 834.000000
    1000021 红霉素软膏 支 8g 自费 西药房 软膏国产 0.7000000000 16.000000
    1000681 阿昔洛韦乳膏 支 10g 自费 西药房 软膏国产 1.4000000000 31.000000
    0200041 开塞露 支 20ml 自费 西药房 其它国产 1.0000000000 46.000000但是,到了程序中就不能运行,提示@aParamno附近有错。
    求大虾帮助
      

  3.   

    结贴了,虽然发帖人回复的人都是我,问题找到了,虽然不清楚到底是为什么。程序中原来有 部分SQL代码,我给 删掉了,虽然在SQL Server Mannagement Studio中可以正常运行,到了程序中就是另外一种情况了,本SQL语句是通过HoDebug跟踪得到的,问题可能就是这部分原因吧。