当我通过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上进行相同的测试,结果始终相同,在临时表的结果集上具有相同的正确行数。