Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов процедуры из процедуры по имени из строки 
:(
    Опции темы
YanTsys
Дата 22.5.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



Как из хранимой процедуру выполнить другую процедуру по ее имени в текстовой строке и потом получить обратно возвращаемый параметр?

Что то вроде
Код

CREATE PROCEDURE y_exe_startproc
@NumCommand int output
AS
DECLARE @Num  int;
begin

    exec ("y_exe_proc0001 @Num =@Num output;");
    SET @NumCommand = @Num;
    
end
GO




Это сообщение отредактировал(а) YanTsys - 22.5.2009, 12:24
PM MAIL ICQ   Вверх
KostaPC
Дата 22.5.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 18.7.2008

Репутация: нет
Всего: нет



Код

declare @query nvarchar(max)
set @uqery = (select "exec y_exe_proc001"+@any_add_text+" output");
sp_executesql @query


Что-то вроде этого.
Просто не до конца понял что именно нужно сделать.
PM MAIL WWW Jabber   Вверх
YanTsys
Дата 22.5.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



Нужно имея несколько процедур  разными именами и с одинаковым перечнем параметров
"y_exe_proc0001"
"y_exe_proc0002"
"y_exe_proc0003"
"y_exe_proc0004"
"y_exe_proc0005"
запустить одну из них и потом считать возвращенное значение.

нужно разбить процедуру на большое количество различных способов ее выполнения так чтобы не делать аналог
switch 
case 1
case 2
case 3

так как команда exec ("y_exe_proc0001") принимает текстовое название процедуры то дело только за возвратом параметров, а тут уперся лбом и никак...  smile 
PM MAIL ICQ   Вверх
KostaPC
Дата 22.5.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 18.7.2008

Репутация: нет
Всего: нет



Может сделать в процедурах
"y_exe_proc000X" OUT параметр ?

Тогда вроде как дожно работать так:

Код

declare @query nvarchar(max)
decrate @return_value int
set @uqery = (select "exec y_exe_proc00"+@num+", @return_value output")
EXEC(@query)

PM MAIL WWW Jabber   Вверх
YanTsys
Дата 24.5.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



Спасибо большое очень помогла ваша процедура sp_executesql

Заработал такой тестовый код

Код

CREATE PROCEDURE y_exe_startproc
@Test nvarchar(200) output

AS

DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);

begin

SET @SQLString = N'exec y_exe_proc0001 @Num output';
SET @ParmDefinition = N'@Num nvarchar(25) OUTPUT';

EXECUTE sp_executesql
    @SQLString
    ,@ParmDefinition
    ,@Num = @Test OUTPUT;

SELECT @Test;

end
GO


Теперь остается только подставлять текстовое название процедуры.

Теперь буду разбираться как запустить процедуру по какому нибудь системному идентификатору...
Если разбираться с OBJECT_ID() это правильное направление поиска?


PM MAIL ICQ   Вверх
KostaPC
Дата 25.5.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 18.7.2008

Репутация: нет
Всего: нет



Думаю правильное направление, хотя не могу точно сказать, не работал с OJECT_ID() более глубоко, чем проверка на существование объекта.
PM MAIL WWW Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.