Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储过程使用jdbc驱动程序返回错误的值_Java_Sql Server_Stored Procedures_Jdbc_Jtds - Fatal编程技术网

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

Java 存储过程使用jdbc驱动程序返回错误的值,java,sql-server,stored-procedures,jdbc,jtds,Java,Sql Server,Stored Procedures,Jdbc,Jtds,当通过jdbc驱动程序执行MSSQL服务器上的存储过程时,我遇到了一种奇怪的情况。我试过jtds和MicrosoftJDBC,结果都是一样的 我有其他SPs可以很好地工作,但在这一个上,有一个奇怪的情况 以下是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.

当通过jdbc驱动程序执行MSSQL服务器上的存储过程时,我遇到了一种奇怪的情况。我试过jtds和MicrosoftJDBC,结果都是一样的

我有其他SPs可以很好地工作,但在这一个上,有一个奇怪的情况

以下是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
这里的问题是set@count

如果我使用强制值,例如99,它将正常工作。如果我没有使用强制值,而是使用带注释的select和temp表中的计数,那么它在MSMSM上非常有效,但是如果通过JDBC执行,我使用两个不同的客户机和jtds和microsoft JDBC驱动程序,那么最终的总值是错误的。 在某些执行中,值甚至会发生变化

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

有什么问题吗

提前谢谢

更新:

我已经采纳了一些建议并提出了一些建议

SELECT * FROM #TempTable
检查结果。而且,虽然我在结果集中得到的行有正确的数据,但我没有所有的行。每次运行此SP时,我都会得到不同的线路。这就是为什么原始SP的结果总是比假设结果低一个错误的数字,有时会发生变化


在MSMSM上执行相同的测试,结果总是相同的,在临时表的结果集中有相同的正确行数。

我不熟悉jdbc。但是如果你使用一个诱人的表格,而使用一个真实的表格,你会得到正确的计数吗?我猜时态表是不可访问的。可能吧,但如果可访问的不可访问,那么最后一次选择的结果不是空的吗?因为我确实收到了值,只是不正确。例如,如果正确的值为100,我可能会收到70。。谢谢,我建议你试试。如果设置@count=99工作,则检查从临时表和实际表返回的计数。如果真正的桌子工作,但桌子不工作,你会发现大的。您还可以尝试选择@count count…我猜上面的SQL已经被混淆了,您想要什么计数?行数?countcolumnA将是非空值的计数。如果使用Testable中的SELECT@count=countcolumnA,会发生什么?有多大的错误?零计算不需要的行数?不算几行吗?绝对随机数?