存储过程使用jdbc驱动程序返回错误的值

时间:2016-06-21 16:32:13

标签: java sql-server stored-procedures jdbc jtds

当我通过jdbc驱动程序执行时,我的MSSQL服务器上的存储过程出现了奇怪的情况。我尝试过jtds和microsoft jdbc,效果相同。

我有其他功能完善的SP,但在这一个上,有一种奇怪的情况。

以下是SP的内容:

select b.columnA, count(b.columnA) as Rejects
   into #TempTable
   from tableA a inner join tableB b on a.columnA = b.columnA
   where b.columnB is null
   and a.columnC = 1
   group by b.columnA
   having count(b.columnA) > 2;

   declare @count int
   set @count = 99 --(select count(columnA) as Count from #TempTable)

   select @count as Total, a.columnD
   from (
   select count(a.columnA) as columnD
   from #TempTable a inner join tableA b on a.columnA = b.columnA
   where a.Rejects = 3
   and registerDate>=dateadd(hour, -1, getdate()) ) a

问题在于@count。

如果我使用强制值,例如99,它可以正常工作。如果我使用带有来自临时表的计数的注释选择,而不是使用强制值,它在MSMSM上工作得很好但是,如果通过JDBC执行(我使用两个不同的客户端同时使用jtds和microsoft jdbc驱动程序),那么最后的&# 34;总计"价值是错误的。 在某些执行中,值甚至会发生变化。

MSMSM和JDBC客户端上的执行方法相同:exec SP_Name;

可能是什么问题?

提前致谢!

更新

我已经按照一些建议做了一个

SELECT * FROM #TempTable

检查结果。而且,虽然我在结果集上获得的行具有正确的数据,但我没有所有的行。每次我运行这个SP我都会得到不同的线条。这就是为什么原始SP的结果始终是错误的数字(低于假定结果)并且有时会变化。

在MSMSM上进行相同的测试,结果始终相同,在临时表的结果集上具有相同的正确行数。

0 个答案:

没有答案