在存储过程变量中使用变量

时间:2013-10-04 12:37:36

标签: sql sql-server

我正在使用变量来存储计数,并尝试多次触发存储过程,每次都会迭代该数字。但是,我遇到了需要使用的语法问题。这是我到目前为止所做的:

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 @ID=@p1 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 '+'

2 个答案:

答案 0 :(得分:3)

将int var转换为nvarchar:

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

答案 1 :(得分: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 @ID=@p1 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