--向员工表实体表和关系表中插数据的过程
Create proc [dbo].[AddEmployeeData]
(
@DepID varchar(5000), --部门ID号 (提供给插入关系表中的参数,这里的部门ID在前台传过来分割符组成的字符串)
@EmployeeID int, --员工ID号 (提供给插入关系表中的参数)
@FName varchar(50), --员工姓名 (提供给插入员工实体表中的参数)
@FAge int, --员工年龄 (提供给插入员工实体表中的参数)
@FBirthday datetime, --员工生日 (提供给插入员工实体表中的参数)
@FJiGuan varchar(50), --籍贯 (提供给插入员工实体表中的参数)
@FSexID int, --性别ID (提供给插入员工实体表中的参数)(性别下拉选中的下标+1即可)
@FNumber varchar(50) --员工编号 (提供给插入员工实体表中的参数)
)
as
begin
begin tran myTran--声明一个事务
--第一步:向员工实体表中插入数据
insert into TEmployee(FName,FAge,FBirthday,FJiGuan,FSexID,IsAbled,FNumber,IsConfirmed)
values(@FName,@FAge,@FBirthday,@FJiGuan,@FSexID,1,@FNumber,1)--插入的数据默认为可用的,未审核的
--第二步:向员工和部门关系表中插入数据
--准备数据
declare myCursor cursor for --定义游标
--备注:Sql技巧
--使用select value from SplitToTable('1,3,4,5,7',',')再结合游标的方式不如直接使用
--insert into Mapping_Employee_Department select value from SplitToTable('1,3,4,5,7',',')
--这样可以更简洁一些
select value from SplitToTable('1,3,4,5,7',',')
--select value from SplitToTable('1,3,4,5,7',',') --使用游标的对象(跟据需要填入select文)
select value from SplitToTable(@DepID,'$') --使用游标的对象(跟据需要填入select文)
open myCursor --打开游标
fetch next from myCursor into @DepID --将游标向下移行,获取的数据放入之前定义的变量@id,@name中
while @@fetch_status=0 --判断是否成功获取数据
begin
--操作数据
declare @num int--设定一个计数变量,用于计算关系表中一共有几个ID为传过来的数据
set @num=0
set @num= (select count(1) from Mapping_Employee_Department where employeeID=@EmployeeID )
if(@num>=1)
begin
delete from Mapping_Employee_Department where employeeID=@EmployeeID--把关系表中员工号为传送过来的员工ID数据全都删除掉
end
if(@num=0)
begin
insert into Mapping_Employee_Department(employeeID,departmentID)
values(@EmployeeID,@DepID) --进行相应处理(跟据需要填入SQL文)
end
fetch next from myCursor into @DepID --将游标向下移行
end
close myCursor --关闭游标
deallocate myCursor --撤销游标
if @@error<>0 --捕获错误
Rollback Tran myTran--事务的回滚
else
COMMIT TRAN myTran --提交事务
end