Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
6-1092277120
Sash
2004-08-12 06:18
2004.10.17
IP


14-1096202526
Comp
2004-09-26 16:42
2004.10.17
Как настроить интернет через прокси-сервер?


3-1095839241
New
2004-09-22 11:47
2004.10.17
SQL


1-1096568026
Dot
2004-09-30 22:13
2004.10.17
Применение настроек


14-1096018770
Кукушкинд
2004-09-24 13:39
2004.10.17
Дайджесты форумов....




   Наверх