Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Как лучше всего выйти из следующей ситуации:   Найти похожие ветки 

 
Bless ©   (2004-09-17 15:53) [0]

Как лучше всего выйти из следующей ситуации:
Есть хранимая процедура.
Хп должна вернуть два датасета. Но второй датасет зависит от значения
некоторого поля первого датасета.
Глянув на код, думаю станет понятнее:

declare cursor my_curs
local
fast_forward
for select * from t1 where nzz=@nzz --"@nzz - входной параметр процедуры

open my_curs
fetch next from curs into @nzz, @name, @kod
close ny_curs

select * from t1 where nzz=@nzz --возвращаем первый датасет
if @kod=9999 SELECT * from t2 where ind=1 --возвращаем второй датасет
ELSE Select * from t2 where ind=2  

Но таблица t1 довольно большая и искать в ней одни и те же данные дважды
(раз - для курсора, раз - для возврата) не хотелось бы.
Как можно этого избежать?
Можно, конечно, сделать select *into #tmp from t1 и потом и курсор натравить на временную таблицу и ее же возвращать. Но может есть варианты поэллегантней?


 
сергей1   (2004-09-17 17:15) [1]

нифига не понятно, приведи саму процедуру. что конкренто ты хочешь получить ?

>open my_curs
>fetch next from curs into @nzz, @name, @kod
>close ny_curs
здеся ты прочитал первую строчку из курсора, затем исходя из значения @kod получил второй датасет. Полная чушь. Или может быть ты хочешь получить столько датасетов, сколько строчек в курсоре ? хотя это еще большая ерунда


 
Bless ©   (2004-09-17 17:28) [2]

сергей1  (17.09.04 17:15) [1]>
>нифига не понятно, приведи саму процедуру. что конкренто ты
>хочешь получить ?

Дык это почти вся эта процедура и есть (несколько упрощенная).

>здеся ты прочитал первую строчку из курсора, затем исходя из
>значения @kod получил второй датасет.

В первом датасете будет гарантированно не больше одной записи (поле nzz уникальное).
Единственное, что я не проверил @@fetch_status (ведь записи может вообще не быть). Но я специально поубирал все проверки, чтоб не загромождать пример.

>Полная чушь.

Что именно кажется тебе чушью? То, что второй датасет зависит от первого?


 
сергей1   (2004-09-17 17:59) [3]

все, понял что к чему. Выкидывай курсоры нафиг

declare @v int
set @v = (select kod from t1 where nzz=@nzz)

теперь

if @v=999 SELECT * from t2 where ind=1
ELSE Select * from t2 where ind=2



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
14-1095998666
anterior
2004-09-24 08:04
2004.10.17
Где храняться пароли пользователей в WinXP?


4-1095073086
UsAd
2004-09-13 14:58
2004.10.17
Запуск процесса


14-1096042220
Defunct
2004-09-24 20:10
2004.10.17
Если бы программисты строили дома.


1-1097017647
ДЫМ
2004-10-06 03:07
2004.10.17
Как обработать исключения при чтении/записи на дискету?


3-1095651463
korvin
2004-09-20 07:37
2004.10.17
Поиск без учёта регистра