码迷,mamicode.com
首页 > 其他好文 > 详细

存储过程的简单应用

时间:2020-06-30 13:14:27      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:class   drop   传递   key   creat   开始   strong   mic   mamicode   

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

技术图片

存储过程的简单应用

标签:class   drop   传递   key   creat   开始   strong   mic   mamicode   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!