我有一个 SQL 语句,它在 MS Server Management Studio 中执行时有效,从 C# 提交时有效,但从 Java 提交时无效(1.6,使用 sqljdbc4.jar)。
基本问题似乎是选择表变量。继第一条评论之后,我已经使用更简单的示例完全重写了这个问题,以显示哪些有效,哪些无效。
以下查询:
DECLARE @IsLoadRaw as INT = ?
DECLARE @PrimaryID as varchar(1000) = ?
--Declare temporary table to hold message IDs and fill according to Primary ID.
DECLARE @MessageIDs TABLE ( MessageID BIGINT )
SELECT MessageID FROM Messages WHERE PrimaryID = @PrimaryID
在 SQL Management Studio 和从 Java 提交时都可以使用。在这两种情况下,它都会返回一个带有两个 MessageID 的结果集(对于我用来测试的给定 PrimaryID 是正确的)。
以下查询:
DECLARE @IsLoadRaw as INT = ?
DECLARE @PrimaryID as varchar(1000) = ?
--Declare temporary table to hold message IDs and fill according to Primary ID.
DECLARE @MessageIDs TABLE ( MessageID BIGINT );
INSERT @MessageIDs SELECT MessageID FROM Messages WHERE PrimaryID = @PrimaryID;
SELECT * FROM @MessageIDs;
在 SQL Management Studio 中工作,它返回具有相同两个 MessageID 的结果集。从 Java 提交时,它不返回任何结果集。
使我们使用@MessageIDs 的完整语句在通过ADO.NET 从C# 提交时起作用。我假设这里的第二个示例也可以。该问题与 Java 无关,似乎与使用表变量有关。由于代码看起来正确并在 SQL Management Studio 下运行,我对如何调试它感到困惑。
知道为什么这不适用于 Java 吗?当从 Java 提交时,我可以使用哪些工具来了解服务器对此查询的操作?