zoukankan      html  css  js  c++  java
  • 存储过程的简单应用

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

  • 相关阅读:
    测试计划
    团队项目需求分析
    团队成员分工及绩效评估
    结对项目之五子棋游戏
    .net web service 参数类型
    ipad webapp 左右分栏 webview的问题
    研究生阶段开始认真写Blog
    [小明学Shader]15.基于Grid的地形混合shader
    [Unity]浅谈AssetBundle的依赖关系打包与加载
    [小明学Shader]光栅化渲染器
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/13212796.html
Copyright © 2011-2022 走看看