首页 > 其他 > 详细

存储过程的简单应用

时间:2020-06-30 12:02:26      阅读:63      评论:0      收藏:0      [点我收藏+]

今天教大家如何使用存储过程自动生成一张日历表,我们以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

技术分享图片

存储过程的简单应用

原文:https://www.cnblogs.com/xiaohuhu/p/13212796.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!