0

インストールの前に、アプリケーションは SQL をチェックして、さまざまな設定とともに正しい権限があることを確認します。それらの設定の 1 つが@@OPTION NOCOUNT.

この値をデータベースから引き出す方法を一生理解できないようです。

私はこれを試しました。オンかオフかに関係なくNOCOUNT、常に 1 が返されます。

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

Java で別の SQL ステートメントを使用して一時テーブルを作成しようとしましたが、そこから値を取得しようとしましたが成功しませんでした。テーブルは問題なく作成されますが、この場合常に挿入される値はゼロです。

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; 

オンかオフかに関係なく、常にゼロを返します。

NOCOUNTJavaアプリケーションを使用してオンまたはオフかどうかを確認する方法を理解しようと数日を費やしましたが、アイデアが不足しています。

奇妙な部分は、SQLMgmtスタジオを使用すると、すべてがうまく機能します。挿入などすべてが機能します。私のJavaプログラムを使用すると、そうではありません。

これはJavaの制限ですか?@@OPTIONSMS は、外部プログラムを使用してプルすることを許可したくないですか?

ストアドプロシージャも試しました。ストアド プロシージャを呼び出すと、返されたときに結果が 512 になるはずなのに、ゼロが返されNOCOUNTます。

助言がありますか?この時点で何でも試してみることができてうれしいです。

4

1 に答える 1

0

Java.sql.* ドライバーは JDBC を使用しますが、SSMS は ODBC を使用して SQL サーバーに接続します (使用している SQL のバージョンによって異なります)。これらの SET ステートメントは独自仕様であるため、デフォルト値は ODBC/SQLOLEDB と JDBC で異なります。したがって、SET NOCOUNT は、ODBC/SQLOLEDB ではデフォルトでオフになり、JDBC ではオンになると思います。

これは簡単に確認できます。SET NOCOUNT 値を切り替えて、次を実行します。

SET NOCOUNT OFF
DECLARE @NOCOUNT INT = 1;
IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 10;          
SELECT @NOCOUNT AS NOCOUNT;
于 2016-03-11T22:40:03.603 に答える