2013-10-04 46 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'作爲計數變量? – William

+0

'+'附近的語法不正確,與intellisense顯示的相同。我會在這個問題上加上這一點。威廉 - 沒有任何理由,除了我是一個白癡。 –

回答

3

演員整型var當成一個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