如何从Java应用程序外部调用SQL NOCOUNT

时间:2016-03-11 20:51:31

标签: java sql-server tsql nocount

在安装之前,我们的应用程序会检查SQL以确保它具有正确的权限以及各种设置。其中一个设置是@@OPTION NOCOUNT

我似乎无法弄清楚如何从数据库中提取这个值。

我试过这个。 <{1}}开启或关闭无关紧要,始终返回1。

NOCOUNT

我尝试在Java中使用单独的SQL语句创建临时表,并尝试从那里获取值但没有成功。表格创建得很好,但在这种情况下总是插入的值为零。

  DECLARE @NOCOUNT INT = 1; IF ( (512 & @@OPTIONS) = 512 ) SET   @NOCOUNT = 10;          
   SELECT @NOCOUNT AS NOCOUNT;

我做的事情并不重要,我似乎无法从数据库中提取正确的值。

即使在Java中运行此查询也会返回零。

CREATE TABLE TempNoCount(tNoCount int);
DECLARE @NOCOUNT int = 0; 
IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 1;
INSERT INTO #TempNoCount (tNoCount) VALUES (@NOCOUNT);

我刚刚通过java尝试了简单的查询:

 DECLARE @NOCOUNT INT = 0
 IF @@OPTIONS & 512 > 0 SET @NOCOUNT = 2
 SELECT @NOCOUNT AS NC

无论是打开还是关闭,仍然始终返回零。

我花了几天的时间试图弄清楚如何使用java应用程序检查 SELECT CONVERT(INT,@@OPTIONS & 512) as NOCOUNT; 是否打开或关闭,并且我已经没有想法了。

奇怪的是,当我使用SQLMgmt studio时,一切正常,花花公子。创建插入等一切正常。当我使用我的java程序时,它不会。

这是我对java的限制吗? MS不想让您使用外部程序来提取NOCOUNT吗?

我甚至尝试过存储过程。当我调用存储过程时,它仍然返回零,即使@@OPTIONS被转动时结果应为512 ....

有什么建议吗?我现在更乐意尝试任何事情。

1 个答案:

答案 0 :(得分:0)

Java.sql。*驱动程序使用JDBC,而SSMS使用ODBC连接到sql server我相信(取决于你拥有的SQL版本)。我猜这些SET语句是专有的,因此ODBC / SQLOLEDB和JDBC之间的默认值会有所不同。所以,我猜想对于ODBC / SQLOLEDB,SET NOCOUNT将默认关闭,而对于JDBC则默认为。

您可以轻松验证这一点,只需切换SET NOCOUNT值,然后运行:

SET NOCOUNT OFF
DECLARE @NOCOUNT INT = 1;
IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 10;          
SELECT @NOCOUNT AS NOCOUNT;