Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Выполнение функции из строки


Автор: MadCoder 1.8.2008, 14:34
Здравствуйте!
Задача такая: прочитать из строки название функции, выполнить ее и вывести результат. 
Вот что я накодил:
Код

declare @sql varchar(800)
declare @contr_id varchar(10)
declare @method_name varchar(10)
declare @result varchar(10)
Set @method_name='tree_HavePhones'
Set @contr_id='1'
SET @SQL = 'SELECT * FROM [dbo].['+@method_name+']('+@contr_id+')'
exec(@SQL)
IF @result='1'
print 'Есть телефон'
else
print 'Нет телефона'

Как видно из кода, нужно как-то подгрузить результат EXECUTE (exec) в @result. Почитал http://www.sql.ru/faq/faq_topic.aspx?fid=104, не помогло. В продолжении http://forum.vingrad.ru/act-ST/f-154/t-218984.html.

Пожалуйста, помогите smile .

Автор: MadCoder 1.8.2008, 15:03
Должно работать подобно этому:
Код

Set @result = dbo.tree_HavePhones(1)
IF @result='1'
print 'Есть телефон'
else
print 'Нет телефона'

Автор: SergKO 4.8.2008, 08:38
Если я правильно понял, то
Код

declare     @sql                        nvarchar(800),
                @contr_id                 nvarchar(10),
                @method_name      nvarchar(100),
                @result                    char(1);

    select     @method_name = 'tree_HavePhones', @contr_id = '1';

    set @sql = N'select @result = dbo.'+@method_name+'(@contr_id)';

    execute sp_executesql @sql, N'@result char(1) out, @contr_id nvarchar(10)',
                    @result                = @result out,
                    @contr_id              = @contr_id;

    if @result = '1'
        print 'Есть телефон';
    else
        print 'Нет телефона';


Автор: MadCoder 4.8.2008, 09:32
То, что доктор прописал! smile Спасибо, SergKO!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)