2012-03-28 23 views
0

我讀過如何返回與動態SQL輸出參數的幾個例子,但都被強似他們(我在略有不同,他們創建的過程內的變量,假設這是我問題的根源)。我得到的錯誤:與輸出參數語法清晰動態SQL

Must declare the table variable "@tbl". 

當我試圖運行下面的程序(執行它的測試代碼後列出)。我關門了嗎?

DECLARE @tbl nvarchar(40) 
DECLARE @bnch INT 
SET @tbl = 'tblDailyPricingAndVol' 

EXEC sprocReturnDataPointBenchmark @tbl, @bnch 

存儲過程:

ALTER PROCEDURE [dbo].[sprocReturnDataPointBenchmark] @tblName NVARCHAR(50), 
    @benchmark BIGINT OUTPUT 

AS 
BEGIN 

DECLARE @sql nvarchar(1000), 
@parameters NVARCHAR(100) = N'@tbl NVARCHAR(50), @benchOUT BIGINT OUTPUT'; 

SET @sql = N'SELECT @benchOUT = Count(ID) FROM @tbl WHERE DateAdded = ' + 
    '(SELECT MAX(DateAdded) FROM tblDailyATR AS T2)'; 

EXEC sp_executesql @sql, @parameters, @tbl = @tblName, @benchOUT = @benchmark OUTPUT 
SELECT @benchmark 

END 

回答

1

有一對夫婦在我第一遍語法錯誤上面列出的,但我需要解決試圖在通過表名(輸入參數)的概念問題動態sql中的參數變量。在這裏很好的例子:Generate dynamic SQL statements in SQL Server

所以,我的修訂,工作代碼爲:

ALTER PROCEDURE [dbo].[sprocReturnDataPointBenchmark] @tblName NVARCHAR(50), 
    @benchmark BIGINT OUTPUT 

AS 
BEGIN 

DECLARE @sqlStatement nvarchar(500) 
DECLARE @parameters NVARCHAR(100) 
DECLARE @fullStatement NVARCHAR(500) 

SET @parameters = '@benchmark BIGINT OUTPUT' 

SET @sqlStatement = N'SELECT @benchmark = Count(ID) FROM ' + @tblName + ' WHERE DateAdded = ' + 
    '(SELECT MAX(T2.DateAdded) FROM ' + @tblName + ' AS T2)'; 

EXEC sp_executesql @sqlStatement, @parameters, @benchmark = @benchmark OUTPUT 
SELECT @benchmark 

END