Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.032 c
3-1095609402
map4ello
2004-09-19 19:56
2004.10.17
Access таблица и RecNo


1-1096637206
AntonSh
2004-10-01 17:26
2004.10.17
Функции


14-1095921446
Rule
2004-09-23 10:37
2004.10.17
Поделитесь опытом по обучению человеков работы на компьютере.


1-1096535660
46_55_41_44
2004-09-30 13:14
2004.10.17
Invalid Pointer Operation в DLL. (не из-за String)


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский