Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
1

Использование хранимых процедур

29.06.2014, 15:39. Показов 1115. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть:
Есть две хранимые процедуры, А и Б

А - главная, Б - дочерняя

А должна вызывать Б заданное число раз

это А
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE test_main
@import_type  INT=1
AS
 
BEGIN
 
IF (@import_type=1)
EXEC testo @import_type
IF (@import_type=2)
EXEC testo @import_type
IF (@import_type=3)
BEGIN
 EXEC testo @import_type
 RETURN
END
 
EXEC dbo.test_main @import_type
 
END
это Б
SQL
1
2
3
4
5
6
7
8
9
10
CREATE PROCEDURE testo
@import_type INT output
AS
 
BEGIN
 
print @import_type
SET @import_type=@import_type+1
 
END
Выполнение процедуры А выводит на экран кучу единичек, а мне бы в идеале на экране видеть 1,2,3 построчно.
Где косяк, подскажите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2014, 15:39
Ответы с готовыми решениями:

Пример создания парметризированных зпросов и хранимых процедур и использование их в ASP
Интересует сабж.

Перенос хранимых процедур
Всем добрый день! Продолжаю изучать SQL после скоропостижного ухода DBA методом "жить хочешь -...

Декорирование хранимых процедур
есть ли возможность навесить метаинформацию на хранимую процедуру, выполняя create procedure, по...

Отладка хранимых процедур
Привет всем! Сабж. Заранее благодарен.

6
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
29.06.2014, 15:58 2
Antykus, если у вас @import_type не равно 3, то у вас в процедуре test_main возникает бесконечная рекурсия. Судя по тому, что у вас выводится куча единичек, то вы либо передаете в процедуру 1, либо не передаете ни чего.
Хотите 1, 2, 3, делайте так:
T-SQL
1
2
3
4
5
6
7
CREATE PROCEDURE test_main
AS
BEGIN
    EXEC testo 1
    EXEC testo 2
    EXEC testo 3
END
0
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
29.06.2014, 16:03  [ТС] 3
суть как раз в том, чтобы была возможность именно из дочерней процедуры вернуть значение переменной, которая одновременно является входящим параметром для основной процедуры
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
29.06.2014, 16:28 4
Antykus, то есть, грубо говоря, вы хотите передать в процедуру 1, чтобы она вам, с помощью еще одной хранимой процедуры, вернула 1? Зачем вообще вызывать такую процедуру? Не проще сразу взять значение параметра? Ну и не ясно, при чем здесь 1, 2, 3, если сейчас вы говорите, что хотите вернуть одно значение ...
В общем, не понятно ни чего: не понятно, что вы хотите сделать, не понятно, зачем вы это хотите сделать. Понятно только одно - бесконечное количество единиц появляется из-за бесконечной рекурсии в вашей процедуре. Уберите ее, и единица в выводе останется одна.
0
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
29.06.2014, 16:49  [ТС] 5
В данном случае я просто учусь и тестирую.
А в целом хочу сделать следующее:
Есть три процедуры, в которых при помощи курсора я гружу данные из одной таблички в другую.
Механизм каждой из трёх процедур схож, используются лишь разные выборки, и переменные.
Вот хочу создать одну процедуру-мать, и три дочерние процедуры, и чтобы в основной процедуре был входной параметр, обозначающий номер процедуры, и чтобы этот входной параметр меняла процедура дочерняя
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
29.06.2014, 17:28 6
Antykus, вызывайте процедуру следующим образом
T-SQL
1
EXEC testo @import_type OUTPUT
и уберите вызов test_main в конце. Тогда добьетесь желаемого результата.
1
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
29.06.2014, 17:34  [ТС] 7
вот спасибо большущее!
0
29.06.2014, 17:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2014, 17:34
Помогаю со студенческими работами здесь

Объявление входных параметров хранимых процедур
Интересует вот такая штука - нельзя указать параметру, что он НЕ может принимать нулл значения? ...

Определить количество системных хранимых процедур
1) Определить количество системных хранимых процедур 2) Установить, является ли строка символов...

Вызов хранимых процедур в теле транзакции
Есть хранимая процедура примерно такого содержания: CREATE PROCEDURE... .. AS .. BEGIN...

Проблемы с выполнением хранимых процедур MSSQLServer
Не уверен, что поможет, но в начале процедуры попробуй поставить SET NOCOUNT ON.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru