SQL-Server数据库存储过程学习

本文介绍了SQL-Server数据库存储过程的学习记录,包括如何创建存储过程以生成年度工作日历,利用表值参数进行批量数据插入,以及存储过程的基本语法,如变量、表、临时表、循环、条件语句、游标、触发器和存储过程的使用。还讨论了自定义函数与存储过程的区别。
摘要由CSDN通过智能技术生成

一.在生产中涉及到SQL-Server数据库存储过程,顺便学习记录

--创建存储过程 可生成当年所有日期,并且周末工作时间为0小时 ,其中HR_Calendar  为业务表
CREATE PROCEDURE dbo.Auto_HR_Calendar
AS 
SET DATEFIRST 1
declare @i varchar(10) 
declare @j int
declare @year int
declare @num int
set @j = 110
set @i= dateadd(d,1-datepart(dy,getdate()),getdate())
set @year=datepart(yy,@i)
SELECT @num= COUNT(1) FROM HR_Calendar  WHERE HRC_ID LIKE 'HRC'+CONVERT(varchar(10),@year)+'%'
if (@num=0)
begin
while(@year=datepart(yy,@i))
begin
if(DATEPART(dw, @i)>5)
begin
insert into HR_Calendar (HRC_ID,HRC_Date,

HRC_WorkHour) values('HRC'+CONVERT(varchar(10),@year)+'00000'+CONVERT(varchar(10),@j),@i,0)
end
else
begin
insert into HR_Calendar (HRC_ID,HRC_Date,

HRC_WorkHour) values('HRC'+CONVERT(varchar(10),@year)+'00000'+CONVERT(varchar(10),@j),@i,8)
end
set @i=dateadd(d,1,@i)
set @j=@j+1
end
end   
Go

二),工作中涉及数据批量插入时可用到sqlserver新特性:Bulk和表值参数(Table-Valued Parameters),我用的是表值参数

顾名思义,表值参数表示你可以把一个表类型作为参数传递到函数或存储过程里。

实例讲解:

第一步:创建一个Type类型和写入数据的原始表结构相同 

CREATE TYPE [dbo].[TestTVP] AS TABLE(
    [TID] [bigint] NOT NULL,
    [DepID] [nvarchar](100) NOT NULL,
    [DepName] [nvarchar](512) NOT NULL,
    [DataChange_CreateTime] [datetime] NOT NULL,
    [DataChange_LastTime] [datetime] NOT NULL,
    PRIMARY KEY CLUSTERED 
(
[TID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO

第二步:创建存储过程

CREATE PROCEDURE [dbo].[SP_TestTVP_I]
(
@TestTVP TestTVP READONLY
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值