2016-03-02 31 views
0

我對使用執行sp_executesql的需要使用動態變量建立「執行sp_executesql的」參數

的一個簡單的問題沒有進入我的代碼,目前導致錯誤太多細節,我更感興趣的不同的方法我可以用它來建立EXECUTE sp_executesql的語句

在我的STOR_PROC,我有以下的(含@tTableName & @tVar爲被傳入參數)

DECLARE @strSQL nVARCHAR(1000) 
DECLARE @parmDef nVARCHAR(100) 
DECLARE @outDef nVARCHAR(100) 

SET @strSQL = N'SELECT @nTotalOut = sum(r.TOT_SALES) FROM @tTableName 
--this procedure is actually in a loop, as I need to provided total sales 
--from multiple years and sales data per year is stored in its own individual table 
--(ie: @tTableName = '2015_Sales_Data', '2014_Sales_Data', etc, etc) 

SET @parmDef = N'@nTotalOut int output' 
set @outDef = N'@nTotalOut=' + @tVar + ' OUTPUT' 

execute sp_executesql @strSQL, @parmDef, @outDef 

我需要動態定義@outDef的原因是因爲對於每次迭代,我需要將總銷售額存儲到自己的變量中(因此@tVar將保存實際變量名稱,即:@ nTotal2015,@ nTotal2014,@ nTotal2013,等,等)

在結束時,這個循環完成,我可以做一個

SELECT @nTotal2015, @nTotal2014, @nTotal2013 

,並在1行顯示每年的總銷售額

問題: 當我跑我的商店程序,我收到以下錯誤:

Error converting data type nvarchar to int. 

我已經嘗試了很多不同的解決辦法之前,我決定張貼在這裏,但到了最後,我想知道如果我可以建立動態變量

的EXECUTE sp_executesql的語句

有一點需要注意:如果我硬編碼的輸出參數爲:

execute sp_executesql @strSQL, @parmDef, @[email protected] OUTPUT 

然後它的工作!

有什麼建議嗎?

回答

0

太長的評論。

使用單個變量運行代碼並將該值存儲在臨時表中。

declare @Totals table (year int, total decimal(18, 6)); 

. . . 

execute sp_executesql @strSQL, @parmDef, @outDef; 

insert into @Totals(year, total) 
    select @year, @total; 

這假設你在變量中有一個@year變量正在處理。

+0

@year絕對是我使用的一個變量 能否詳細說明'@year'和'@total'將如何從您的示例中填充? 另外,你會如何定義'@outDef'?使用那個參數的變量是什麼導致錯誤 thx – Tommy