2010-02-12 35 views
1

我對SQL Server 2005(本機客戶端)使用ODBC和C++。
我有以下簡單的測試存儲過程返回恆定值的兩行:ODBC執行/讀取SQL 2005存儲過程結果集不能使用表@variable

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。我在連接手柄上嘗試了不同的遊標屬性,但無濟於事。

非常感謝幫助!

+0

有沒有可以用來執行SQL語句而不是查詢的函數?根據定義,查詢返回結果。所以你需要執行SQL但不返回結果的功能。 – 2010-02-12 21:48:29

+0

我不明白這將如何幫助我。我的問題是我無法獲取由我的ODBC應用程序中的SELECT創建的結果集的行。我確實需要一個結果集,而不僅僅是執行SQL。我不確定你是什麼意思。 – Timo 2010-02-12 21:56:17

回答

0

問題在於語句中的可滾動遊標設置,更改爲不可滾動的遊標解決了問題。

+0

所以請接受它作爲正確的答案,因此我們可以很容易地看到它解決了 – bluish 2012-06-18 08:37:29

相關問題