MS SQL Exception: Incorrect syntax near '@P0'

前端 未结 7 652
孤街浪徒
孤街浪徒 2020-12-03 16:36

I\'m querying a DB using MS SQL and for some reason I get the following error: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near \'@P0\' ev

7条回答
  •  攒了一身酷
    2020-12-03 17:02

    Call the Procedure in the below way

    @Override
    public List getHoldingsReport(
            int pid
    )
    {
        List holdings = null;
    
        Session sess = sFac.getCurrentSession();
        if (sess != null && pid > 0)
        {
            @SuppressWarnings(
                "rawtypes"
            )
            Query query = sess.createSQLQuery(
                    "{CALL GetHoldingsforPF(:pid)}").addEntity(Rep_Holdings.class);
            query.setParameter("pid", pid);
    
            @SuppressWarnings(
                "rawtypes"
            )
            List result = query.getResultList();
            if (result != null)
            {
                if (result.size() > 0)
                {
                    holdings = new ArrayList();
                    for (int i = 0; i < result.size(); i++)
                    {
                        Rep_Holdings holding = (Rep_Holdings) result.get(i);
                        holdings.add(holding);
                    }
                }
            }
        }
    
        return holdings;
    }
    

    The same procedure in SQL Server

    ALTER PROCEDURE [dbo].[GetHoldingsforPF]
        @pid int
    AS
    BEGIN
    SET NOCOUNT ON;
            -- Insert statements for procedure here
    
            declare @totalPFInv decimal(15,2);
    
        set @totalPFInv =  ( select  sum(totalInvestment) from Holdings where pid = @pid );
    
        Select hid,
               pid,
               scCode,
               numUnits,
               avgPPU,
               adjPPU,
               totalInvestment,
               cast ( (totalInvestment/@totalPFInv)*100 as decimal(10,1)) as perPF,
               totalDiv,
               cast ( (totalDiv/totalInvestment)*100 as decimal(10,1)) as divY
               from Holdings
               where pid = @pid
    END
    

提交回复
热议问题