存储过程的简单应用

今天教大家如何使用存储过程自动生成一张日历表,我们以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 @   最萌小胡胡  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示