Хранимая процедура MS SQL вернула наборы результатов с ODBC - PullRequest
0 голосов
/ 05 февраля 2009

У меня есть хранимая процедура, и если хранимая процедура делает это:

SELECT 0 As Ret
DELETE FROM table where value1 = 1

Возвращает 1 результат строки со значением 0 и именем столбца Ret

Но если я сделаю это:

DELETE FROM table where value1 = 1
SELECT 0 As Ret

Я не получил никаких результатов.

Мой вопрос: как мне получить второй вариант, чтобы вернуть значение?

Я использую C ++ и ODBC.

Ответы [ 4 ]

3 голосов
/ 05 февраля 2009

См. Настройку для - SET NOCOUNT.

1 голос
/ 05 февраля 2009

Шахкалпеш прав, nocount должен работать для этого, хотя я бы рекомендовал не использовать набор результатов в качестве возвращаемого значения, а вместо этого использовать инструкцию RETURN, а также запрашивать возвращаемое значение proc.

SET NOCOUNT ON 
DELETE FROM table where value1 = 1
SET NOCOUNT OFF
SELECT 0 As Ret
1 голос
/ 05 февраля 2009

Явно установите переменную в @@ RowCount и затем верните ее

Declare @ret int
Select @ret = @@RowCount
Select @ret

EDIT

Он возвращает 0 для второй формы, потому что число строк для выбора 0 в качестве ret равно 0 строкам. Таким образом, вы захотите сохранить количество строк, возвращаемых сразу после удаления.

0 голосов
/ 05 февраля 2009

Хорошо. Я обнаружил, что вы можете использовать вызов ODBC SQLMoreResults для получения следующего набора результатов. Таким образом, вы можете продолжать вызывать эту функцию SQLMoreResults, пока не останется больше наборов результатов.

В моем случае после вызова SQLMoreResults я получил ожидаемый набор результатов.

Это довольно круто, потому что это означает, что одна хранимая процедура может возвращать несколько наборов результатов. Я никогда не знал, что это может.

@ Sambo99 и @shakalpesch ваши предложения также работают и возвращают только 1 результат.

...