テーブルをループして名前を指定するストアドプロシージャを呼び出そうとしています。ストアドプロシージャは別のデータベースにあります。動的SQL Serverストアドプロシージャを呼び出す - 指定されていないパラメータが必要です
しかし、私はメッセージを得続ける
プロシージャまたは関数 'sp_KPI_People_Added_Countは' パラメータ '@Period'、指定されていません期待しています。
しかし、それは供給されています。
ステートメントとパラメータの定義をNVarChar
に設定し、接頭辞をN
としました。私はまた、パラメータ自体でこれを試しましたが、明らかにそれは必須ではありません。
すべての印刷出力は期待どおりで、テキストで実行を呼び出すと正常に動作します。
だから私は立ち往生しています。どんな指針も温かく歓迎されます。
おかげで、
クリス。
Declare @KPI_Value Decimal(14,4)
Declare @StoredProcedure NVarChar(200)
Declare @Periodic Char(1)
Declare @ExecSql NVarChar(200)
Declare @ParameterDefinition AS NVarChar(200)
Declare KPI_Cursor CURSOR LOCAL FOR
SELECT SProc, Periodic from KPI where Section = 2
FOR UPDATE OF Current_Value
Open KPI_Cursor
Fetch Next From KPI_Cursor into @StoredProcedure, @Periodic
Declare @Required_Period VARCHAR(5)
SET @Required_Period='MTD'
While @@FETCH_STATUS = 0 BEGIN
Set @KPI_Value = 0 -- Have tried with and without this
If @Periodic = 'Z' BEGIN
SET @ExecSQL = N'Prod.dbo.' + @StoredProcedure;
/* Specify Parameter Format */
SET @ParameterDefinition = N'@Period VarChar(5), @Result_Type VarChar(10), @Result Decimal(14,4) OUTPUT';
/* Execute Transact-SQL String */
print @ExecSQL
print @ParameterDefinition
print @Required_Period
print @KPI_Value
EXECUTE sp_executesql @ExecSQL, @ParameterDefinition, @Required_Period, 'Result', @KPI_Value Output
END
Fetch Next from KPI_Cursor into @StoredProcedure, @Periodic
END
Close KPI_Cursor
Deallocate KPI_Cursor
次のようにストアドプロシージャは、パラメータを有する:
ALTER PROCEDURE [dbo].[sp_KPI_People_Added_Count]
@Period VarChar(5), -- MTD or YTD
@Result_Type VarChar(10), -- Summary, Result or Detail
@Result Decimal(14,4) OUTPUT -- The returned result
AS
....
を次のように出力される。
Prod.dbo.sp_KPI_People_Added_Count
@Period VARCHAR(5)、@Result_Type VarChar(10)、@Result Decimal(14,4)OUTPUT
MTD
0.0000
プロシージャまたはsp_KPI_Cust_Added_Countプロシージャsp_KPI_Cust_Added_Count行0
プロシージャまたは関数 'sp_KPI_People_Added_Count'には、パラメータ '@Period'が指定されていますが、これは指定されていません。
この場合、sp_executesqlは必要ありません。 – gbn
sp_ –