MS SQL Server: процедура возвращает несколько рекордсетов. к
От: AWRoraInc Украина  
Дата: 27.10.05 06:44
Оценка:
Есть хранимая процедура, которая возвращает 4 набора данных (рекордсета).
На клиенте я пользуюсь одним из четырех (в зависимости от условия)

Вопрос:
Допустим из 4-ех наборов мне нужен только 3-й.
Как сделать, чтобы хранимая процедура возвращала ТОЛЬКО 1 набор данных?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
@VRora
Re: MS SQL Server: процедура возвращает несколько рекордсето
От: pkarklin  
Дата: 27.10.05 06:49
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>Есть хранимая процедура, которая возвращает 4 набора данных (рекордсета).

AWR>На клиенте я пользуюсь одним из четырех (в зависимости от условия)

AWR>Вопрос:

AWR>Допустим из 4-ех наборов мне нужен только 3-й.
AWR>Как сделать, чтобы хранимая процедура возвращала ТОЛЬКО 1 набор данных?

Переписать процедуру так, чтоб там был тока 1 SELECT, который бы возвращал данные. Если возможности изменить хп, то на клиенте при использовании ADO юзать метод NextRecordset.
Re[2]: MS SQL Server: процедура возвращает несколько рекордс
От: AWRoraInc Украина  
Дата: 27.10.05 07:09
Оценка:
Здравствуйте, pkarklin, Вы писали:

P>Переписать процедуру так, чтоб там был тока 1 SELECT, который бы возвращал данные. Если возможности изменить хп, то на клиенте при использовании ADO юзать метод NextRecordset.


ну такой подход мне известен,
но я считаю его "некрасивым"
думаю, что на самом серваке должна быть какая-то хрень.
тем более, что меня об этом спросили на одном собеседовании,
а я не знал че ответить толковое.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
@VRora
Re[3]: MS SQL Server: процедура возвращает несколько рекордс
От: pkarklin  
Дата: 27.10.05 07:13
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>Здравствуйте, pkarklin, Вы писали:


P>>Переписать процедуру так, чтоб там был тока 1 SELECT, который бы возвращал данные. Если возможности изменить хп, то на клиенте при использовании ADO юзать метод NextRecordset.


AWR>ну такой подход мне известен,

AWR>но я считаю его "некрасивым"
AWR>думаю, что на самом серваке должна быть какая-то хрень.

Нет никакой "хрени"!!! Скока Вы написали SELECT в хп, стока она наборов и вернет (если это не SELECT INTO). Более того, на сервере Вы вообще можете получить только первый из возвращаемых наборов, в отличаи от клиента.

AWR>тем более, что меня об этом спросили на одном собеседовании,

AWR>а я не знал че ответить толковое.

Точную формулировку вопроса с собеседования можете привести?
Re[4]: MS SQL Server: процедура возвращает несколько рекордс
От: AWRoraInc Украина  
Дата: 27.10.05 07:19
Оценка:
Здравствуйте, pkarklin, Вы писали:


P>Точную формулировку вопроса с собеседования можете привести?


так и спросили: как вернуть из 4 рекордсетов 2-ой без NextRecordset?
потом что-то говорили про NOCOUNT ON/OFF, но я попробывал — не канает!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
@VRora
Re[5]: MS SQL Server: процедура возвращает несколько рекордс
От: pkarklin  
Дата: 27.10.05 07:22
Оценка: +1
Здравствуйте, AWRoraInc, Вы писали:

AWR>Здравствуйте, pkarklin, Вы писали:



P>>Точную формулировку вопроса с собеседования можете привести?


AWR>так и спросили: как вернуть из 4 рекордсетов 2-ой без NextRecordset?

AWR>потом что-то говорили про NOCOUNT ON/OFF, но я попробывал — не канает!


Мдя...

Видимо тот, кто проводил собеседование сам не знал, вот Вас и спросил.
Re[5]: MS SQL Server: процедура возвращает несколько рекордс
От: KGP http://kornilow.newmail.ru
Дата: 27.10.05 07:45
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>Здравствуйте, pkarklin, Вы писали:



P>>Точную формулировку вопроса с собеседования можете привести?


AWR>так и спросили: как вернуть из 4 рекордсетов 2-ой без NextRecordset?

AWR>потом что-то говорили про NOCOUNT ON/OFF, но я попробывал — не канает!

Не пойму ...
вам задали вопрос, вы не дали ответ
вы спросили ПРАВИЛЬНЫЙ ответ? что вам ответили?
Re[6]: MS SQL Server: процедура возвращает несколько рекордс
От: AWRoraInc Украина  
Дата: 27.10.05 07:51
Оценка:
Здравствуйте, KGP, Вы писали:

AWR>>так и спросили: как вернуть из 4 рекордсетов 2-ой без NextRecordset?

AWR>>потом что-то говорили про NOCOUNT ON/OFF, но я попробывал — не канает!

KGP>Не пойму ...

KGP>вам задали вопрос, вы не дали ответ
KGP>вы спросили ПРАВИЛЬНЫЙ ответ? что вам ответили?
СОБЕСЕДОВАНИЕ БЫЛО ДАВНО,
поэтому помню смутно,
но тепрь вспомнил, потому как самому понадобилось.

они задали вопрос о 2-ом рекордсете из 4-х
я сказал, что делаю NextRecordset
они спросили а как без него?
я сказал, что не знаю...
они началаи говорить: а вы не пробывали NOCOUNT ON/OFF,
для достиженеия такого эффекта

я говорю — Нет..
на этом разгворо закончился...


я пришел домой и попробывал NOCOUNT ON/OFF — все рвно возвращает 4 рекордсета
-------------
А вообще думаю, что если нет другого решения кроме NextRecordset и писания хранимки так чтобы возвращала 1 рекордсет, то тема закрывается!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
@VRora
Re[7]: MS SQL Server: процедура возвращает несколько рекордс
От: _d_m_  
Дата: 27.10.05 09:20
Оценка: +1
Здравствуйте, AWRoraInc, Вы писали:

AWR>Здравствуйте, KGP, Вы писали:


AWR>>>так и спросили: как вернуть из 4 рекордсетов 2-ой без NextRecordset?

AWR>>>потом что-то говорили про NOCOUNT ON/OFF, но я попробывал — не канает!

KGP>>Не пойму ...

KGP>>вам задали вопрос, вы не дали ответ
KGP>>вы спросили ПРАВИЛЬНЫЙ ответ? что вам ответили?
AWR>СОБЕСЕДОВАНИЕ БЫЛО ДАВНО,
AWR>поэтому помню смутно,
AWR>но тепрь вспомнил, потому как самому понадобилось.

AWR>они задали вопрос о 2-ом рекордсете из 4-х

AWR>я сказал, что делаю NextRecordset
AWR>они спросили а как без него?
AWR>я сказал, что не знаю...
AWR>они началаи говорить: а вы не пробывали NOCOUNT ON/OFF,
AWR>для достиженеия такого эффекта

AWR>я говорю — Нет..

AWR>на этом разгворо закончился...

Те, кто задавал тебе такие вопросы были просто не компетенты
Re[7]: MS SQL Server: процедура возвращает несколько рекордс
От: algol Россия about:blank
Дата: 27.10.05 09:40
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>они началаи говорить: а вы не пробывали NOCOUNT ON/OFF,

AWR>для достиженеия такого эффекта

Может, они просто издевались? Я бы даже сказал — глумились.

AWR>я пришел домой и попробывал NOCOUNT ON/OFF — все рвно возвращает 4 рекордсета


Похоже, вы довели их до такого состояния своими предыдущими ответами.
Re[5]: MS SQL Server: процедура возвращает несколько рекордс
От: Docker Канада  
Дата: 27.10.05 14:50
Оценка:
Здравствуйте, AWRoraInc, Вы писали:

AWR>Здравствуйте, pkarklin, Вы писали:



P>>Точную формулировку вопроса с собеседования можете привести?


AWR>так и спросили: как вернуть из 4 рекордсетов 2-ой без NextRecordset?

AWR>потом что-то говорили про NOCOUNT ON/OFF, но я попробывал — не канает!


Да нет, я думаю имелось в виду следущее.
Когда выставлен SET NOCOUNT OFF, то для каждого запроса возвращается 2 рекордсета (для ADO по крайней мере, но думаю для некоторых других тоже): один для числа затронутых записей и второй собственно результат. Если же выставить SET NOCOUNT ON, то рекордсет с числом записей не придет, а придет сразу тот, который при SET NOCOUNT OFF был вторым, т.е. типа сразу получил второи рекордсет.
Re[6]: MS SQL Server: процедура возвращает несколько рекордс
От: pkarklin  
Дата: 28.10.05 06:26
Оценка: +1
Здравствуйте, Docker, Вы писали:

D>Да нет, я думаю имелось в виду следущее.

D>Когда выставлен SET NOCOUNT OFF, то для каждого запроса возвращается 2 рекордсета (для ADO по крайней мере, но думаю для некоторых других тоже): один для числа затронутых записей и второй собственно результат. Если же выставить SET NOCOUNT ON, то рекордсет с числом записей не придет, а придет сразу тот, который при SET NOCOUNT OFF был вторым, т.е. типа сразу получил второи рекордсет.

SET NOCOUNT ON\OFF запрещает\разрешает отправку на клиента сообщения DONE_IN_PROC для каждой инструкции DML. Но это не набор данных!!! QA отображает это сообщение в виде N row(s) affected. А вот ADO, например, считает, получая это сообщение, например при открытии хп, содержащей более 1 инструкции DML (например, вставка во временную таблицу и уже выборка из нее), что хп отработала и получает "пустой" набор. Для этого и ставят SET NOCOUNT ON. Но это не иммет никакого отношения к получению действительно нескольких наборов данных.
Re[7]: MS SQL Server: процедура возвращает несколько рекордс
От: Merle Австрия http://rsdn.ru
Дата: 28.10.05 07:25
Оценка: +1
Здравствуйте, pkarklin, Вы писали:

P> А вот ADO, например, считает, получая это сообщение, например при открытии хп, содержащей более 1 инструкции DML (например, вставка во временную таблицу и уже выборка из нее), что хп отработала и получает "пустой" набор.

На самом деле это даже не ADO, а OLEDB провайдер... А вот, например, с ODBC такого прикола нет.
Вообще провайдер на запрос, вместе с рекордсетом, должен вернуть информацию о том сколько записей обработано, и прочую лабуду... И существуют такие понятия как non returning row и returning row команды, и для non returning row тоже надо как-то возвращать эту информацию. OLEDB провайдер (при NOCOUNT OFF) поступает просто — возвращает рекордсет в состоянии closed, но со служебной информацией сколько записей обработано. При NOCOUNT ON служебной информации нет и возвращать нечего, ну и лишний recordset на клиента при этом не приезжает...
... << RSDN@Home 1.1.4 beta 7 rev. 0>>
Мы уже победили, просто это еще не так заметно...
Re[7]: MS SQL Server: процедура возвращает несколько рекордс
От: Docker Канада  
Дата: 28.10.05 14:12
Оценка:
Здравствуйте, pkarklin, Вы писали:

...

P>SET NOCOUNT ON\OFF запрещает\разрешает отправку на клиента сообщения DONE_IN_PROC для каждой инструкции DML. Но это не набор данных!!! QA отображает это сообщение в виде N row(s) affected. А вот ADO, например, считает, получая это сообщение, например при открытии хп, содержащей более 1 инструкции DML (например, вставка во временную таблицу и уже выборка из нее), что хп отработала и получает "пустой" набор. Для этого и ставят SET NOCOUNT ON. Но это не иммет никакого отношения к получению действительно нескольких наборов данных.



Да, я это понимаю и на 100% согласен. Но поскольку начали разбираться, что же могли иметь в виду те кто проводил интервью, спрашивая, грубо говоря, "Как получить второй рекордсет (подсказка — используя SET NOCOUNT ON"), я высказал свое предположение. Хотя безусловно вопрос мне тоже кажется странным.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.