我有一个视图的存储过程,它总是超时,它用于查找某些日期范围的数据。这对我来说是一个全新的概念,我已经为主日期范围设置了存储过程,如果我需要特定的日期,我无法弄清楚如何正确执行它。这是代码和问题
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[COL_Run_DOM_Parameters]
@StartDate varchar (50),
@EndDate varchar (50)
AS
SET NOCOUNT ON
SELECT *
FROM dbo.COL_V_GEMS_DOM_FCT
WHERE REC_EFF_STT_DT BETWEEN '2010-01-01' AND '2012-12-31'
当我执行时,我会这样做:
Execute COL_Run_DOM_Parameters @StartDate = '2011-12-22', @EndDate '2012-05-17'
但是当我执行它时,它仍然提供了2010年到2012年之间的所有数据,而不是我要求的日期范围。在我的代码中哪里有错误?
答案 0 :(得分:4)
您需要更改查询以引用参数!
ALTER PROCEDURE [dbo].[COL_Run_DOM_Parameters]
@StartDate varchar (50),
@EndDate varchar (50)
AS
SET NOCOUNT ON
SELECT *
FROM dbo.COL_V_GEMS_DOM_FCT
WHERE REC_EFF_STT_DT BETWEEN @StartDate and @EndDate
就像你曾经一样执行。
答案 1 :(得分:1)
SELECT * 来自dbo.COL_V_GEMS_DOM_FCT 在'2010-01-01'和'2012-12-31'之间的REC_EFF_STT_DT
你已经硬编了我朋友的日期,你没有使用你的变量
答案 2 :(得分:1)
将查询更改为
SELECT *
FROM dbo.COL_V_GEMS_DOM_FCT
WHERE REC_EFF_STT_DT BETWEEN @StartDate AND @EndDate
并调用SP
Declare @StartDate = '2012-02-01'
Declare @EndDate = '2013-02-01'
EXEC COL_Run_DOM_Parameters @StartDate @EndDate