调用的存储过程需要从一个存储的过程需要2个内部参数1参数

问题描述:

我有只需要当前年(2012)作为参数,并显示数据01-01-2012至2012的当前日期即26-11的存储过程usp_gethomedata(<current year>) -2012。调用的存储过程需要从一个存储的过程需要2个内部参数1参数

我有另一个存储的过程示出了在该usp_gethomedata(<start date>, <end date>)需要2参数的开始和结束日期范围从01-01-190026-11-2012类似数据。

现在,我不知道如何从第一个内部调用第二个存储过程,以便它将数据显示为01-01-201226-11-2012,前提是我必须牢记......在调用第一个过程时,我可以提供只有2012年即当前年份作为我的asp.net应用程序的参数。

请帮助。

不,您不能创建重载的存储过程。一个会覆盖另一个。虽然重载功能是可能的。因此,将内部存储过程更改为某个不同的名称,反之亦然(即外部存储过程)。这是一个将模拟你的情况的例子。

- 外部存储过程

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 

结果(部分)是作为

enter image description here

下3210

希望这会有所帮助。