sql下员工工牌(YC0001)的简单实现
方法一:
use master;
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
方法二:
效果:
效果:
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