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