收藏 分享(赏)

SqlServer触发器实现自动编号.doc

上传人:myk79025 文档编号:7658838 上传时间:2019-05-23 格式:DOC 页数:2 大小:28KB
下载 相关 举报
SqlServer触发器实现自动编号.doc_第1页
第1页 / 共2页
SqlServer触发器实现自动编号.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、触发器做个实现数据插入表时自动编号的功能,详细出处参考:http:/ 1、触发器有两种类型:数据定义语言触发器(DDL 触发器)和数据操纵语言触发器(DML 触发器) 。 DDL 触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP 或相似的语句)对数据库结构进行修改时激活而做出响应。 DML 触发器:在用户对数据库执行数据操作时发生,触发器中的代码会被自动调用。 2、DML 触发器分类:Insert 触发器、Delete 触发器、Update 触发器、上面任意类型混合。 3、触发器创建语法: 复制代码 代码如下:CREATE TRIGGER ON FOR|AFTER |IN

2、STEAN OF AS 4、触发器必须附加到表或视图上,触发器不能单独存在。AFTER 或 FOR 触发器不支持视图,INSTEAD OF 支持表或视图。 5、INSERT 触发器中,SQL Server 会创建一个插入行的副本,并把该副本插入到一个特殊表 Insert 表中,该表只在触发器作用域内存在。 6、DELETE 触发器中,SQL Server 会创建一个删除行的副本,并把该副本插入到一个特殊表 Delete 表中,该表只在触发器作用域内存在。 7、UPDATE 触发器中,SQL Server 认为更新的记录是删除了现有的记录,插入更新后的新纪录,所以 UPDATE 触发器中包含 I

3、nsert 和 Delete 两个特殊表,也是只存在触发器作用域内,这两个表的行数完全一样。 8、触发器尽可能简短,因为触发器和触发器内的语句被一同处理,即直到语句执行完成才算是触发器完成。如果代码很长那触发器运行时间就会很长。 下面是个实现自动编号功能的例子:-有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从 1 开始 -项目编号格式为 PJ+“-“+“客户编号“+“-“+“ 日期“+“-“+“ 流水号 “ -如项目编号:PJ-ABCD-120805-0001 create table testAccount -创建测试客户表 ( tAccName n

4、varchar(100), -客户姓名 tAccId nvarchar(32) -客户编号 ) create table testProject -创建测试项目表 ( tProName nvarchar(100), -项目名称 tProId nvarchar(32), -项目编号 tIdAcc nvarchar(100), -客户编号 tProGuid nvarchar(64) -guid ) go create trigger T_AutoNumber on testProject after insert as begin declare one nvarchar(8), -编号第一部分,

5、 PJ two nvarchar(32), -编号第二部分,客户编号 three nvarchar(8), -编号第三部分,日期 four int, -编号第四部分,流水号 guid nvarchar(64) -guid set one=PJ set three= convert( varchar(8),GETDATE(),112) -从 Inserted 副本表里获取当前插入数据的客户编码和 guid select two=tIdAcc,guid=tProGuid from Inserted -获取编号最后四位 select four=max(cast(right(tProId,4)as i

6、nt) from testProject where tIdAcc=two -对每一个新客户的流水号都是从 1 开始,已存在客户为最大流水号加 1 if four is null set four=0 else set four=cast(four as int) set four=four+1 update testProject set tProId=one+-+two+-+three+-+right(0000+cast(four as varchar),4) where tProGuid=guid end go -生成测试表数据 insert into testAccount value

7、s (小小鸭有限公司,XXYGS) insert into testAccount values (丑小鸭有限公司,CXY) insert into testProject (tProName,tIdAcc,tProGuid)values (小鸭成长项目 ,XXYGS,newid() insert into testProject (tProName,tIdAcc,tProGuid)values (小鸭学游泳项目 ,XXYGS,newid() insert into testProject (tProName,tIdAcc,tProGuid)values (丑小鸭成长项目 ,CXY,newid() select * from testProject drop table testAccount drop table testProject

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报