Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
sysadm2000
Member

Откуда: Москва
Сообщений: 1212
Вот есть некоторая процедура, которую я делал для бейсика. Любой из рекордсетов, возвращаемый этой процедурой, в бейсике достаточно удобно прокрутить по NEXTRECORDSET обработать. Менять эту процедуру мне не хочется, тк работает она хорошо и выдает все что мне надо.

Теперь мне понадобилось ее вызвать в SQL. Мне нужны тут данные из ее третьего и четвертого рекордсетов. Я вообще-то OPENQUERY для таких решений иногда пользуюсь, но тут ведь несколько рекордсетов, я чето не пойму как их прокрутить, чтобы получить нужный...
Ну и вообще, есть ли какой-то более умный путь?

К сообщению приложен файл. Размер - 0Kb
23 мар 06, 18:14    [2483229]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
sysadm2000
Мне нужны тут данные из ее третьего и четвертого рекордсетов.

Если они по структуре и отличаются от первого, то никак.
23 мар 06, 18:15    [2483235]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
На сервере можно получить только 1ый набор.

автор
Любой из рекордсетов, возвращаемый этой процедурой, в бейсике достаточно удобно прокрутить по NEXTRECORDSET обработать.


Ага. Надо получить только 9ый, а будут выполнены все. Вот веселуха то для сервера. Напишите столько хп, сколько Вам надо наборов.
23 мар 06, 18:17    [2483239]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
На сервере можно получить только 1ый набор.

Не свсем.
if object_id('tempdb..#p') is not null
drop procedure #p
go
create proc #p
as
select 0 as id
select 2
go
if object_id('tempdb..#t') is not null
drop table #t
create table #t(id int)
insert into #t exec #p
select * from #t
23 мар 06, 18:22    [2483262]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну и вообще, есть ли какой-то более умный путь?
Самый умный на мой взгляд путь это не пытаться на TSQL создавать клиентские приложения. Все равно получиться много хуже
23 мар 06, 18:26    [2483280]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
sysadm2000
Member

Откуда: Москва
Сообщений: 1212
Грустно....
Те ничего более продвинутого, чем OpenQuery нет? И никакого дополнительного хитрого, скрытого параметра там нет?

Ну выкрутится можно конечно как-то... Попробую ща добавить в нее еще параметр - вызов SQL/ADO. Обработать этот параметр в процедуре и выдать ТОЛЬКО ОДИН рекордсет при вызове на SQL-сервере...
23 мар 06, 18:27    [2483284]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Гавриленко Сергей Алексеевич
автор
На сервере можно получить только 1ый набор.

Не свсем.
if object_id('tempdb..#p') is not null
drop procedure #p
go
create proc #p
as
select 0 as id
select 2
go
if object_id('tempdb..#t') is not null
drop table #t
create table #t(id int)
insert into #t exec #p
select * from #t


Был не прав. :(
23 мар 06, 18:32    [2483301]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104760
sysadm2000
Грустно....
Те ничего более продвинутого, чем OpenQuery нет? И никакого дополнительного хитрого, скрытого параметра там нет?

Ну выкрутится можно конечно как-то... Попробую ща добавить в нее еще параметр - вызов SQL/ADO. Обработать этот параметр в процедуре и выдать ТОЛЬКО ОДИН рекордсет при вызове на SQL-сервере...



exec sp_OACreate 'ADODB.Connection'
....
<много много кода>
...
23 мар 06, 18:34    [2483311]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
sysadm2000
Member

Откуда: Москва
Сообщений: 1212
Самый умный на мой взгляд путь это не пытаться на TSQL создавать клиентские приложения. 
Все равно получиться много хуже
Увы. Тут не все так просто. Это чисто серверная задача. По ТЗ заказчика нужно вызывать шедулером некую сборку... Те для записей в MSDB надо создавать свои записи с параметрами вызова этой сборки в пользовательской табле - ну на рисунке пользовательская табла сверху, а правая часть нижней формы ложится в MSDB.
Те создание JOB, Shedule и прочих фишек НАДО ДЕЛАТЬ В ОДНОЙ ТРАНЗАКЦИИ с очередной записью в пользовательской табле. Эти все таблы я связываю ВЗАИМНО, причем в одной транзакции.
Те это ЧИСТО СЕРВЕНАЯ ЗАДАЧКА. От клиента тут поступает только один вызов (с параметрами) и ответ - получилось/нет.

К сообщению приложен файл. Размер - 0Kb
23 мар 06, 18:35    [2483316]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
Те это ЧИСТО СЕРВЕНАЯ ЗАДАЧКА.

Т.е. Вы пытаетесь утверждать что одна [серверная] задача всегда должна решаться в одной процедуре? Уверяю Вас, это не так.
23 мар 06, 18:38    [2483328]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104760
Увы. Тут не все так просто. Это чисто серверная задача.
Выборочная обработка возвращаемых процедурой наборов это чисто серверная задача ??? Да помилуй Бог. Хотя судя по вашим предыдущим постам у вас свое мнение о том что где и как должно быть в схеме работы клиент-сервер
23 мар 06, 18:39    [2483330]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
sysadm2000
Member

Откуда: Москва
Сообщений: 1212
exec sp_OACreate 'ADODB.Connection'
Вау дошло. Конечно это лучше OpenQuery.
Только он хочет, чтобы это щас работало на 2000, а чуть позже и на 2005 без переделок, а у меня на 2005 работают только сборки, а на 2000 - только COM...
Поэтому я и искал SQL-решение...
23 мар 06, 18:39    [2483334]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
sysadm2000
Member

Откуда: Москва
Сообщений: 1212
Т.е. Вы пытаетесь утверждать что одна [серверная] задача всегда 
должна решаться в одной процедуре? Уверяю Вас, это не так.
Просто мне ОЧЕНЬ хочется, чтобы не было ОБОРВАННЫХ записей в пользовательской табле, не соответствующих целому пакету записей в таблах в MSDB. Отсюда желание - ВСЕ ЭТО ЗАСУНУТЬ В ОДНУ ТРАНЗАКЦИЮ... Плюс процедура эта уже была написана РАНЕЕ и на ней висит громадный контрол, который тоже неохота переписывать...
Ситуация-то не надуманная, жизненная...
23 мар 06, 18:44    [2483352]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
одна транзакция <> одна процедура.
23 мар 06, 18:47    [2483362]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104760
sysadm2000
Т.е. Вы пытаетесь утверждать что одна [серверная] задача всегда 
должна решаться в одной процедуре? Уверяю Вас, это не так.
Просто мне ОЧЕНЬ хочется, чтобы не было ОБОРВАННЫХ записей в пользовательской табле, не соответствующих целому пакету записей в таблах в MSDB. Отсюда желание - ВСЕ ЭТО ЗАСУНУТЬ В ОДНУ ТРАНЗАКЦИЮ... Плюс процедура эта уже была написана РАНЕЕ и на ней висит громадный контрол, который тоже неохота переписывать...
Ситуация-то не надуманная, жизненная...

Серверная задача НЕ должна попустую переливать данные из запроса в таблицу. Она должна один раз приготовить данные и один раз вернуть их клиенту.
Дальше спорить я с вами не буду - считаю это никчемным делом. Особенно в свете "ну процедура ведь написана и неохота переписывать"
23 мар 06, 18:49    [2483371]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
sysadm2000
Member

Откуда: Москва
Сообщений: 1212
Ок. Спасибо. Я еще раз все обдумаю...
А обижатся за предыдущие посты не стоит. На то и форум, чтобы происходил обмен мнениями.
А там где насчет перемешивания рекордсета при возврате из функции я был не прав...
23 мар 06, 18:58    [2483392]     Ответить | Цитировать Сообщить модератору
 Re: Как в SQL обработать один из нескольких рекордсетов, возвращаемых процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104760
Я не обижаюсь, я говорю о том, что со своей стороны мне добавить больше нечего.
23 мар 06, 19:01    [2483404]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить