我對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。我在連接手柄上嘗試了不同的遊標屬性,但無濟於事。
非常感謝幫助!
有沒有可以用來執行SQL語句而不是查詢的函數?根據定義,查詢返回結果。所以你需要執行SQL但不返回結果的功能。 – 2010-02-12 21:48:29
我不明白這將如何幫助我。我的問題是我無法獲取由我的ODBC應用程序中的SELECT創建的結果集的行。我確實需要一個結果集,而不僅僅是執行SQL。我不確定你是什麼意思。 – Timo 2010-02-12 21:56:17