ODBC Выполнение / выборка набора результатов хранимых процедур SQL 2005 не может использовать таблицу @variable - PullRequest
1 голос
/ 13 февраля 2010

Я использую ODBC и C ++ против SQL Server 2005 (собственный клиент).
У меня есть следующая простая тестовая хранимая процедура, которая возвращает две строки постоянных значений:

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, который мне нужно выполнить, является более сложным и требует табличной переменной, не нужно вдаваться в подробности. Но почему нельзя создать курсор (ODBC) для набора результатов из первого SP?

Кто-нибудь знает, как заставить это работать? Кстати, я утверждаю ODBC v3 на дескриптор среды. Я пробовал разные атрибуты курсора на дескрипторе соединения, но безрезультатно.

Помощь очень ценится!

1 Ответ

0 голосов
/ 15 февраля 2010

Проблема заключалась в установке прокручиваемого курсора в операторе, переход к неконтролируемому курсору решил проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...