存储过程的简单应用

今天教大家如何使用存储过程自动生成一张日历表,我们以SQL Server为操作平台。

问题描述:输入想要生成日历的年份,调用存储过程,即可生成该年的全部日历。

创建表结构

CREATE TABLE CALENDAR_INFO
(
    DATE_NAME VARCHAR(20) PRIMARY KEY,
    YEAR VARCHAR(10),
    MONTH VARCHAR(10),
    WEEK VARCHAR(10),
    DAY VARCHAR(10)
)

创建存储过程

思路:我们传递进一个INT型的参数给存储过程,表示年份,然后取这一年有多少天,从1月1日循环累加到12月31日,并将每天的相关信息都插入到表中,这样一整年的完整日历就完成了。

if exists (select * from sys.procedures where name = 'PROC_CALENDAR')
    drop proc PROC_CALENDAR
GO

CREATE PROC PROC_CALENDAR
@year int
AS
BEGIN
    DECLARE @i INT;
    DECLARE @start_day varchar(20);
    DECLARE @end_day varchar(20);
    DECLARE @day_count INT;
    DECLARE @today DATETIME;
    
    SET @i=0
    --定义一年的开始日期,用CONCAT函数将年份和月份日期拼接起来
    SET @start_day=CONCAT(@year,'-01-01')
    --定义一年的结束日期
    SET @end_day=CONCAT(@year+1,'-01-01')
    --DATEDIFF函数计算日期的间隔天数
    SET @day_count=DATEDIFF(DAY,@start_day,@end_day)
    --把@start_day转成datetime,赋值给@today
    SET @today=CONVERT(DATETIME,@start_day)

    WHILE @i< @day_count
    BEGIN    
        INSERT INTO CALENDAR_INFO VALUES(
            CONVERT(VARCHAR(10),@today,23),
            STR(@year),
            DATENAME(MONTH,@today),  --返回月份
            DATENAME(WEEKDAY,@today), --返回星期几
            DATENAME(DAY,@today)    --返回日期
        )
        SET @i=@i+1
        SET @today=CONVERT(CHAR(10),DATEADD(DAY,1,@today),23)  --天数加1
    END
END

调用存储过程

EXEC PROC_CALENDAR 2020

posted @ 2020-06-30 11:34  最萌小胡胡  阅读(149)  评论(0编辑  收藏  举报