2013-10-04 3 views
0

Я использую переменную для хранения счета и пытаюсь несколько раз запускать хранимую процедуру, повторяя число каждый раз. Однако у меня возникают проблемы с синтаксисом, который мне нужно использовать. Вот то, что я до сих пор:Использование переменной в переменной хранимой процедуры

declare @count INT 
declare @total INT 
declare @p1 nvarchar(255) 

set @count = 1 
set @total = 50 
    if @count <= @total 
    begin 
     set @p1=NULL 
     exec USP_DATAFORM_ADDNEW_b9c5ae3e_1e40_4e33_9682_18fb0bb40ff2 @[email protected] output,@ROLENAME='Load Test Role ' + @count,@DESCRIPTION=N'Role used for automated load test.',@COPYUSERS=0,@CHANGEAGENTID='023C133B-D753-41E9-BCC6-1E33A4ACD600',@SYSTEMROLEID=N'3a33d7a7-c3b3-4a34-a4d7-99ef1af78fb8' 
     select @p1 
     set @count = @count + 1 
    end 

Проблема заключается в том, что @ROLENAME='Load Test Role ' + @count часть. Какой правильный синтаксис использовать? Должен ли я использовать динамический SQL здесь и определить всю вещь в инструкции exec_sql?

Для справки, я нахожусь в SQL Server 2008 R2. Ошибка, которую я получаю, - Incorrect syntax near '+'.

+0

У вас возникла ошибка при выполнении этого? –

+1

Почему бы не использовать 'INT' для переменной count? – William

+0

Неверный синтаксис рядом с '+', тот же, что показывает intellisense. Я добавлю это к вопросу. Уильям. Никакой причины, кроме меня быть идиотом. –

ответ

3

В ролях ИНТ вар как NVARCHAR:

@ROLENAME='Load Test Role ' + CAST(@count AS nvarchar) 
1

Почему бы вам не перебирать его в коде? Может быть проще.

declare @count INT = 1, 
     @total INT = 50, 
     @p1 nvarchar(255) 

    while @count <= @total 
    begin 
     set @p1=NULL 
     exec USP_DATAFORM_ADDNEW_b9c5ae3e_1e40_4e33_9682_18fb0bb40ff2 @[email protected] output,@ROLENAME='Load Test Role ' + @count,@DESCRIPTION=N'Role used for automated load test.',@COPYUSERS=0,@CHANGEAGENTID='023C133B-D753-41E9-BCC6-1E33A4ACD600',@SYSTEMROLEID=N'3a33d7a7-c3b3-4a34-a4d7-99ef1af78fb8' 
     select @p1 
     set @count = @count + CAST(@count AS varchar(2)) 
    end 
Смежные вопросы