Главная страница
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.024 c
14-1096269662
Layner
2004-09-27 11:21
2004.10.17
Американская винда не правильно определяет кол-во


1-1097057457
456
2004-10-06 14:10
2004.10.17
как таскать (drag and drop) кнопки (которые созданы динамически)


3-1095428871
Morrison
2004-09-17 17:47
2004.10.17
Как реализовать поле с суммой значений из другой таблицы?


14-1096167142
Думкин
2004-09-26 06:52
2004.10.17
С днем рождения! 26 сентября


6-1092032506
fylhtq
2004-08-09 10:21
2004.10.17
А кавк програмно подключить сетевой ресурс?