1

SQL Server 2005 (ネイティブ クライアント) に対して ODBC と C++ を使用しています。
定数値の 2 つの行を返す次の単純なテスト ストアド プロシージャがあります。

CREATE PROCEDURE usp_testme AS BEGIN  
   declare @details table( one int, two int, three int, four int )  
   insert @details SELECT 1 one, 2 two, 3 three, 4 four UNION SELECT 5, 6, 7, 8  
   select one, two, three, four from @details  
END  

ODBC コードは次のようになります (簡略化)。

SQLExecDirect( m_hstmt, (SQLCHAR *)"{CALL usp_testme}", SQL_NTS );
SQLFetch( m_hstmt );   

SQLExecDirect() 呼び出しは、次の情報を返します。

INFO: 16954 : 01000 : [Microsoft etc]Executing SQL directly; no cursor  

そして、SQLFetch() 呼び出しは次のようになります。

INFO: 0 : 24000 : [Microsoft etc]Invalid cursor state  

ODBC リファレンス ドキュメントによると、結果セットがありません。
そのため、代わりにストアド プロシージャを次のように変更します (たとえば、テーブル変数を使用しない)。

CREATE PROCEDURE usp_testme AS BEGIN  
 SELECT 1 one, 2 two, 3 three, 4 four UNION SELECT 5, 6, 7, 8  
END  

そして出来上がり、それは動作します。もちろん、これは単純なテスト プロシージャです。実行する必要がある実際の SQL はより複雑で、テーブル変数が必要です。それについて説明する必要はありません。しかし、最初の SP からの結果セットに対して (ODBC) カーソルを作成できないのはなぜでしょうか?

これを機能させる方法を知っている人はいますか?ところで、環境ハンドルで ODBC v3 をアサートしています。接続ハンドルでさまざまなカーソル属性を試しましたが、役に立ちませんでした。

助けていただければ幸いです。

4

1 に答える 1

0

問題は、ステートメントのスクロール可能なカーソルの設定であり、スクロール不可能なカーソルに変更すると問題が解決しました。

于 2010-02-15T08:58:21.760 に答える