[英]Calling a stored procedure that takes 2 parameters from inside a stored procedure that takes 1 parameter
I have a stored procedure usp_gethomedata(<current year>)
that takes only current year (2012) as parameter and displays data for 01-01-2012
to current date of 2012 ie 26-11-2012. 我有一个存储过程usp_gethomedata(<current year>)
,仅将当前年份(2012年)作为参数,并显示01-01-2012
至2012年当前日期即26-11-2012的数据。
I have another stored procedure that shows similar data in usp_gethomedata(<start date>, <end date>)
that takes 2 parameter start and end date ranges from 01-01-1900
to 26-11-2012
. 我有另一个存储过程,在usp_gethomedata(<start date>, <end date>)
中显示类似的数据,其中usp_gethomedata(<start date>, <end date>)
2个参数的开始和结束日期范围,从01-01-1900
到26-11-2012
。
Now, I am not sure how to call the second stored procedure from inside the 1st one so that it display me data for 01-01-2012
to 26-11-2012
provided I have to keep in mind.. that while calling the 1st procedure I can supply only the 2012 ie the current year as a parameter from my asp .net application. 现在,我不知道如何从第一个存储过程中调用第二个存储过程,以便它显示01-01-2012
到26-11-2012
数据,前提是我必须记住..同时调用第一个存储过程过程我只能提供2012年即当前年份作为我的asp .net应用程序的参数。
Please help. 请帮忙。
No you cannot create overloaded stored procedure. 不,你不能创建重载的存储过程。 One will override the other. 一个会覆盖另一个。 Though Overloaded function is possible. 虽然可以实现重载功能。 So, change the inner stored procedure to some different name or the vice versa (ie outer stored procedure). 因此,将内部存储过程更改为某个不同的名称,反之亦然(即外部存储过程)。 Here is an example that will simulate your situation. 这是一个模拟您情况的示例。
-- Outer stored procedure - 外部存储过程
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
-- Inner stored procedure - 内部存储过程
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
The result (partial) is as under 结果(部分)如下
Hope this helps. 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.