sql下员工工牌(YC0001)的简单实现


sql下员工工牌(YC0001)的简单实现
方法一:
use master;
go

--判断数据库Test是否存在
if exists(select * from sys.databases where name='Test')
drop database Test;  --存在则删除
go

--创建Test数据库
create database Test;
go

--使用Test数据库
use Test;
go

--判断数据库Test是否存在emp表
if exists(select * from sys.tables where name='emp')
drop table emp;  --存在则删除
go

--创建emp表
create table emp(
eid int primary key identity(10001,1),
ecd varchar(20) null,  -- 要求是YC0001  YC0002且有系统根据eid自动生成
);
go

--判断当前实例是否存在触发器tri_ecd
if exists(select * from sys.triggers where name='tri_ecd')
drop trigger tri_ecd;
go

--创建触发器用来实现工牌号的根据eid自动生成
create trigger tri_ecd  -- 创建触发器tri_ecd
on emp   --在emp表中
after insert  -- 插入操作后触发此触发器,执行下面的操作
as
declare @eid int;  --声明一个变量eid,用来存放最新插入的数据的eid
declare @ecd varchar(14); --声明一个变量ecd,用来存放截取的eid
set @eid=(select max(eid) from emp);  --从emp表中查询出最新插入的数据的eid
set @ecd=substring(cast(@eid as varchar),2,len(@eid)); --讲整型的eid转为字符型,然后截取除掉前面的1
update emp set ecd='YC'+@ecd where eid=@eid; -- 更新emp表中的ecd列
go

insert into emp values('');
insert into emp values('');
insert into emp values('');

select * from emp;
效果:
eid              ecd
10001     YC0001
10002     YC0002 
10003     YC0003

方法二:

create table dept(
did varchar(20) primary key,
dname varchar(20)
);
go

drop trigger tri_did;
go
create trigger tri_did
on dept
after insert
as
declare @did varchar(20);
set @did=(select top 1 did from dept where did!='1' order by did desc);
if((select count(*) from dept)<=1)
begin
update dept set did='YC10001';
end
else
begin
declare @temp varchar(20);
declare @num int;
set @temp=substring(@did,3,len(@did));
set @num=(cast(@temp as int)+1);
update dept set did=('YC'+cast(@num as varchar)) where did='1';
end
go

insert into dept values('1','a');  --注意:did列初始值必须是1
insert into dept values('1','b');
insert into dept values('1','c');  
效果:
    did               dname
YC10001               a
YC10002               b
YC10003               c 
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值