调用时传入参数年份,返回每月的天数表
create procedure dbo.prMonthlyDaysOfYear ( @year smallint )
as
if ( @year < 1753 )
or ( @year > 9999 )
begin
raiserror('年份错误!请输入1753至9999的年份……',16,1);
return;
end;
declare @i tinyint ,
@days tinyint;
declare @table table
(
monthNum tinyint ,
monthdays tinyint
);
select @i = 1 ,
@days = 0;
while ( @i <= 12 )
begin
if ( @i = 12 )
select @days = datediff(day,
cast(cast(@year as varchar(4)) + '-'
+ cast(@i as varchar(2)) + '-01' as datetime),
cast(cast(@year + 1 as varchar(4))
+ '-01-01' as datetime));
else
select @days = datediff(day,
cast(cast(@year as varchar(4)) + '-'
+ cast(@i as varchar(2)) + '-01' as datetime),
cast(cast(@year as varchar(4)) + '-'
+ cast(@i + 1 as varchar(2)) + '-01' as datetime));
insert @table
( monthNum, monthdays )
values ( @i, @days );
set @i = @i + 1;
end;
select *
from @table;
return;
go
调用该存储过程:
USE [DataBase]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[prMonthlyDaysOfYear] 2019
SELECT 'Return Value' = @return_value
go
结果: