在安装之前,我们的应用程序会检查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 ....
有什么建议吗?我现在更乐意尝试任何事情。
答案 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;