2017-07-29 7 views
4

「スカラー変数を宣言しなければなりません」というエラーを返す次のクエリがあります。SQLのExecクエリからテーブル値関数へのパラメータとしてのテーブル

declare @tbl as ItemName_Id_Table 
       ,@Entry_Date_To varchar(50) = '2017-10-22' 
       ,@qry nvarchar(max) 
set @qry = 
    'SELECT   
      tblStockLedger.item_id, tblStockLedger.inward_qty, tblStockLedger.inward_qty2, Fn_StockValue_1.Value 
    FROM tblStockLedger 
     LEFT OUTER JOIN dbo.Fn_StockValue('''[email protected]_Date_To+''',@tbl) AS Fn_StockValue_1 
      ON tblStockLedger.item_id = Fn_StockValue_1.item_id 
    GROUP BY 
      tblStockLedger.item_id, tblStockLedger.inward_qty, tblStockLedger.inward_qty2, Fn_StockValue_1.Value' 
exec(@qry) 

このエラーを解決する方法を教えてください。

答えて

2

SP_EXECUTESQLを使用して、動的クエリ内でテーブルタイプを機能させる必要があります。また、代わりに、文字列の連結の@Entry_Date_To変数をパラメータ化することができます

DECLARE @tbl   AS ITEMNAME_ID_TABLE, 
     @Entry_Date_To date = '2017-10-22', --changed to date 
     @qry   NVARCHAR(max) 

SET @qry = 'SELECT tblStockLedger.item_id, 
        tblStockLedger.inward_qty, 
        tblStockLedger.inward_qty2, 
        Fn_StockValue_1.Value    
      FROM tblStockLedger 
      LEFT OUTER JOIN dbo.Fn_StockValue(@Entry_Date_To,@tbl) AS Fn_StockValue_1     
         ON tblStockLedger.item_id = Fn_StockValue_1.item_id   
      GROUP BY tblStockLedger.item_id, 
        tblStockLedger.inward_qty, 
        tblStockLedger.inward_qty2, 
        Fn_StockValue_1.Value' 

EXEC Sp_executesql 
    @qry, 
    N'@tbl ItemName_Id_Table READONLY, @Entry_Date_To Date', 
    @tbl,@Entry_Date_To 

注:私は、テーブル値パラメーター」のようなエラーを取得している場合はあなたはしなければならない 『@tbl』

+0

を機能するように、空の@tblテーブル変数を渡していますREADONLYオプションで宣言してください '。 – jamshi

+0

それは動作しますが、私は1つだけのIDを渡そうとしますが、IDの詳細はすべて表示されます。 – jamshi

+1

@jamshi - 'Left join'を' Inner join'に変更しよう –

関連する問題