Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизКак лучше всего выйти из следующей ситуации: Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c