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

SPを次のように呼び出します

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