sql下员工工牌(YC0001)的简单实现和一些特殊查询
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                sql下员工工牌(YC0001)的简单实现和一些特殊查询
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            方法一: use master; go --判斷數(shù)據(jù)庫Test是否存在 if exists(select * from sys.databases where name='Test') drop database Test;? --存在則刪除 go --創(chuàng)建Test數(shù)據(jù)庫 create database Test; go --使用Test數(shù)據(jù)庫 use Test; go --判斷數(shù)據(jù)庫Test是否存在emp表 if exists(select * from sys.tables where name='emp') drop table emp;? --存在則刪除 go --創(chuàng)建emp表 create table emp( eid int primary key identity(10001,1), ecd varchar(20) null,? -- 要求是YC0001? YC0002且有系統(tǒng)根據(jù)eid自動生成 ); go --判斷當前實例是否存在觸發(fā)器tri_ecd if exists(select * from sys.triggers where name='tri_ecd') drop trigger tri_ecd; go --創(chuàng)建觸發(fā)器用來實現(xiàn)工牌號的根據(jù)eid自動生成 create trigger tri_ecd? -- 創(chuàng)建觸發(fā)器tri_ecd on emp?? --在emp表中 after insert? -- 插入操作后觸發(fā)此觸發(fā)器,執(zhí)行下面的操作 as declare @eid int;? --聲明一個變量eid,用來存放最新插入的數(shù)據(jù)的eid declare @ecd varchar(14); --聲明一個變量ecd,用來存放截取的eid --set @eid=(select max(eid) from emp);? --從emp表中查詢出最新插入的數(shù)據(jù)的eid --select @eid=@@identity; set @eid= (select ident_current(‘emp‘));?? ---獲取emp表中最新生成的標識列的值 set @ecd=substring(cast(@eid as varchar),2,len(@eid)); --講整型的eid轉(zhuǎn)為字符型,然后截取除掉前面的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 
?
--觸發(fā)器 模擬日志 create table users( uid int identity primary key, uname varchar(20), pwd varchar(20) ); go create table loginfo( lid int identity primary key, logininfo varchar(100), ldate date ); go if exists(select * from sys.triggers where name='tri_loginfo') drop trigger tri_loginfo; go create trigger tri_loginfo on users after insert,delete as declare @info varchar(100); if exists(select 1 from inserted) begin select @info='用戶 '+uname+' 添加成功' from users; end; if exists(select 1 from deleted) begin select @info='用戶 '+uname+' 刪除成功' from users; end; --insert into loginfo values((select ident_current('users')),@info,getDate()); --ident_current('users')? users表最新生成的標識列的值 --insert into loginfo values((select @@identity),@info,getDate()); go
關(guān)閉標識列
set identity_insert 表名 on;? 
?
轉(zhuǎn)載于:https://www.cnblogs.com/navyzhou/archive/2013/05/07/3065714.html
總結(jié)
以上是生活随笔為你收集整理的sql下员工工牌(YC0001)的简单实现和一些特殊查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: lsof 命令
 - 下一篇: 字节对齐《c和指针》笔记--包含位域结构