我正在尝试构建一个动态存储过程,以允许我将我的字符串where子句作为参数的一部分传递。但是,在MSDN的this article之后,我仍然无法让它运行并出现标题所描述的错误。非常感谢任何帮助。
EXEC [dbo].[Get_Demand_By_Click_Test]
@Year = 2014
错误:
Msg 8178,Level 16,State 1,Line 9
参数化查询'(@ Year int)
SELECT
dbo.vw_Demand_By。*
来自'
期望参数' @ Year',这是未提供的。
存储过程:
ALTER PROCEDURE [dbo].[Get_demand_by_click_test]
@Year INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET nocount ON;
-- Insert statements for procedure here
DECLARE @SQL NVARCHAR(max),
@ParamDefinition NVARCHAR(max)
SET @SQL = N'
SELECT
dbo.vw_Demand_By.*
FROM
dbo.vw_Demand_By
WHERE
Year(EventStartDate) = @Year'
SET @ParamDefinition = N'@Year int';
EXECUTE Sp_executesql
@SQL,
@ParamDefinition;
END
答案 0 :(得分:1)
您还必须传递参数:
EXECUTE Sp_executesql @SQL, @ParamDefinition, @Year = @Year;
答案 1 :(得分:0)
您需要为@Year参数赋值。要执行代码,请使用:
EXECUTE Sp_executesql
@SQL,
@ParamDefinition,
@Year = 2014
<强>更新强> 在回复您的评论时,您可以在2014年固定价值的位置分配任何变量。在您的代码中,它将如下所示:
ALTER PROCEDURE [dbo].[Get_demand_by_click_test]
@Year INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET nocount ON;
-- Insert statements for procedure here
DECLARE @SQL NVARCHAR(max),
@ParamDefinition NVARCHAR(max)
SET @SQL = N'
SELECT
dbo.vw_Demand_By.*
FROM
dbo.vw_Demand_By
WHERE
Year(EventStartDate) = @Year'
SET @ParamDefinition = N'@Year int';
EXECUTE Sp_executesql
@SQL,
@ParamDefinition,
@Year = @Year
END