1

我有一个视图的存储过程,它是如此庞大,它总是超时,它用于查找特定日期范围的数据。这对我来说是一个全新的概念,我已经为主要日期范围设置了存储过程,如果我需要特定日期,我只是不知道如何正确执行它。这是代码和问题

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 年之间的所有数据,而不是我要求的日期范围。我的代码哪里有错误?

4

3 回答 3

5

您需要更改查询以引用参数!

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

像以前一样执行。

于 2013-05-03T18:28:22.740 回答
1

SELECT * FROM dbo.COL_V_GEMS_DOM_FCT WHERE REC_EFF_STT_DT BETWEEN '2010-01-01' 和 '2012-12-31'

你已经硬编码了我的朋友的日期,你没有使用你的变量

于 2013-05-03T18:29:24.723 回答
1

将查询更改为

    SELECT *
    FROM dbo.COL_V_GEMS_DOM_FCT
   WHERE REC_EFF_STT_DT BETWEEN @StartDate AND @EndDate

并像

Declare @StartDate = '2012-02-01'
Declare @EndDate = '2013-02-01'
EXEC COL_Run_DOM_Parameters @StartDate @EndDate
于 2013-05-03T18:33:21.427 回答