0

年と月がかかる SP があります。

Create PROCEDURE Report(
    @targetYear int,
    @targetMonth int
)

そしてそれをクエリする:

select sum(col) where year(dateTime) = @targetYear and month(dateTime) = @targetMonth

それから私は同じことを年だけ持っています

Create PROCEDURE Report(
    @targetYear int
)

そしてそれを次のようにクエリします:

select sum(col) where year(dateTime) = @targetYear

もちろん、ロジックは sum(col) よりも複雑です。

私の質問は、1 年全体を意味する場合に対象月に 0 を渡すことを意味する場合でも、ロジックが 2 つの SP 間で繰り返されないように、この SP をどのように記述することができるかということです。

4

3 に答える 3

1

月としてゼロを渡すとうまくいかないことを除いて、ジョエルの答えが好きです。たとえば、 @targetMonth=0 が必要です。

SELECT sum(col) 
WHERE year(dateTime) = @TargetYear AND 
(@targetMonth = 0 OR month(dateTime) = @targetMonth)
于 2009-02-12T19:57:11.863 に答える
0
SELECT sum(col) 
FROM [yourtable]
WHERE year(dateTime) = @TargetYear 
    AND (@targetMonth < 0 OR month(dateTime) = @targetMonth)
于 2009-02-12T19:54:00.230 に答える
0

ストアド プロシージャには、オプションのパラメーターを指定できます。

Create PROCEDURE Report( @targetYear int, @targetMonth int = null )

これは、パラメーターを使用してもしなくても呼び出すことができます。

exec Report 2009
exec Report 2009, 2 

次に、ロジックで null をチェックします。

SELECT sum(col) 
FROM [yourtable]
WHERE (year(dateTime) = @TargetYear and @targetMonth = null)
  OR (year(dateTime) = @TargetYear AND @targetMonth = month(dateTime))

また

SELECT sum(col) 
FROM [yourtable]
WHERE year(dateTime) = @TargetYear 
  AND (@targetMonth = null OR year(dateTime) = @TargetYear)
于 2009-02-12T20:00:15.317 に答える