Главная страница
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.027 c
14-1096025807
Dmitriy O.
2004-09-24 15:36
2004.10.17
Конвертирование BMP в векторную графику и 3D


9-1087354116
dimodim
2004-06-16 06:48
2004.10.17
У меня проблема с аним. Актор в GlScene


14-1096145052
Palladin
2004-09-26 00:44
2004.10.17
Автоматическая коробка передач.


14-1095965277
lipskiy
2004-09-23 22:47
2004.10.17
Существуют ли электронные карты (местности) в виде


1-1097039937
qwe
2004-10-06 09:18
2004.10.17
Проблема с установкой EhLib 3.5 Components