存储过程的简单应用

Posted xiaohuhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程的简单应用相关的知识,希望对你有一定的参考价值。

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

技术图片

以上是关于存储过程的简单应用的主要内容,如果未能解决你的问题,请参考以下文章

重定向时如何在 Safari 中保留 uri 片段?

VsCode 代码片段-提升研发效率

存储过程的简单应用

如何在片段中使用 GetJsonFromUrlTask​​.java

在android中显示隐藏片段

MySQL存储过程