0

usp_gethomedata(<current year>)現在の年(2012)のみをパラメーターとして取り01-01-2012、2012年の現在の日付(つまり、2012年11月26日)までのデータを表示するストアドプロシージャがあります。

usp_gethomedata(<start date>, <end date>)2つのパラメータの開始日と終了日の範囲をから01-01-1900に取る同様のデータを表示する別のストアドプロシージャがあります26-11-2012

01-01-2012さて、1番目のストアドプロシージャの内部から2番目のストアドプロシージャを呼び出して、データを 表示する方法がわかりません 26-11-2012。ただし、1番目のプロシージャを呼び出すときは、2012、つまり現在のプロシージャしか提供できないことに注意してください。私のasp.netアプリケーションからのパラメーターとしての年。

助けてください。

4

1 に答える 1

2

いいえ、オーバーロードされたストアドプロシージャを作成することはできません。一方が他方をオーバーライドします。オーバーロード機能は可能ですが。したがって、内部ストアドプロシージャを別の名前に変更するか、その逆に変更します(つまり、外部ストアドプロシージャ)。これがあなたの状況をシミュレートする例です。

-外部ストアドプロシージャ

USE [Test]
GO

-- exec [dbo].[USP_GetHomeData] 2012
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[USP_GetHomeData]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[USP_GetHomeData]
GO

CREATE PROCEDURE [dbo].[USP_GetHomeData] 
-- Add the parameters for the stored procedure here
(
    @Year INT
)
AS
BEGIN
        DECLARE @startDate DATETIME='1/1/' + CAST(@Year AS VARCHAR(4))  -- mm/dd/yyyy
        DECLARE @endDate DATETIME=GETDATE() -- mm/dd/yyyy

        SELECT [Date] = DATEADD(Day,Number,@startDate) 
        FROM  master..spt_values  WITH(NOLOCK)
        WHERE Type='P'
        AND DATEADD(day,Number,@startDate) <= @endDate

        exec [dbo].[USP_GetHomeData_Inner] '1/1/1900', @endDate
END

-内部ストアドプロシージャ

USE [Test]
GO

-- exec [dbo].[USP_GetHomeData_Inner] '1/1/1900', '11/25/2012'
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[USP_GetHomeData_Inner]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[USP_GetHomeData_Inner]
GO

CREATE PROCEDURE [dbo].[USP_GetHomeData_Inner] 
-- Add the parameters for the stored procedure here
(
    @startDate DATETIME
    ,@endDate DATETIME
)
AS
BEGIN

        ;WITH Calender AS 
        (
            SELECT @startDate AS CalanderDate
            UNION ALL
            SELECT CalanderDate + 1 FROM Calender
            WHERE CalanderDate + 1 <= @endDate
        )
        SELECT [Date] = CONVERT(VARCHAR(10),CalanderDate,25) 
        FROM Calender WITH(NOLOCK)
        OPTION (MAXRECURSION 0)
END

結果(部分的)は以下の通りです

ここに画像の説明を入力してください

お役に立てれば。

于 2012-11-26T03:09:01.290 に答える