2015-12-06 30 views
0

我必須編寫一個select查詢,並在選擇結果中連接存儲過程Exec。如何連接SQL Select查詢中的Int變量

這是實際的存儲過程的執行結果

exec wf_Move_bills ''' + billid+ ''',361,14098,14100, ''+ binid +'' ,''' + @comment + ''' 

BinId是一個整數。我在與我的查詢連接時遇到了麻煩。返回

結果爲:

exec wf_Move_bills 'XZ242344',361,14098,14100, '+ binid +' ,'Moved by Dev :' 

預期結果是:

exec wf_Move_bills 'XZ242344',361,14098,14100, 300 ,'Moved by Dev :' 

由於在存儲過程中,對於binid參數是int與長度= 4

declare @comment nvarchar(4000) 
set @comment= 'Moved by Dev:' 

select 
    *, 
    'exec wf_Move_bills ''' + billid+ ''',361,14098,14144, ''+ binid +'' ,''' + @comment + ''' ' 
from 
    billingtable 

回答

2

+超載。也就是說,它意味着字符串連接和添加。如果有任何值是數字,那麼它是加法,並且你得到一個錯誤。

所以,做一個明確的cast

select *, 
     'exec wf_Move_bills ''' + billid+ ''',361,14098,14100, ''' + cast(binid as varchar(255)) +''' ,''' + @comment + ''' 

另外,我經常使用替代這種類型的邏輯:

declare @str nvarchar(max); 
set @str = 'exec wf_Move_bills @billid, 361, 14098, 14100, @binid, ''@comment'''; 

set @str = replace(@str, '@billid', @billid); 
set @str = replace(@str, '@binid', @binid); 
set @str = replace(@str, '@comment', replace(@comment, '''', ''''''); 

注:這也提供了一個機會,以處理任何單引號評論。

您也可以使用sp_executedql進行變量替換。

+0

還是我得到的結果作爲高管wf_Move_bills 'XZ100000',361,14098,14144, '+ CAST(binid爲varchar(255))+', '測試' – goofyui

0

變化''+ binid +''''+ convert(varchar(10), binid) +''