您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > SQL Server

SQL Server 2012中的虚拟表(魔术表)

作者:UncleToo  来源:原创  日期:2014-04-15 8:06:47
收藏  评论:( 0 )  阅读:487

SQL Server中, 当我们对任何表执行插入或更新操作时,都会有一个对应的存储新数据和历史数据的表。这些表被称为魔术表或虚拟表。本文UncleToo将通过实例来介绍SQL Server虚拟表的用法。


首先我们创建一张表EMP,并插入一些数据。

创建:

create table emp(empId int, empName varchar(15))

插入数据:

insert into emp
select 1,'d'
union all
select 2,'e'
union all
select 3,'e'
union all
select 4,'p'
union all
select 5,'a'
union all
select 6,'k'

查询表数据:

select * from emp


虚拟表

在SQL Server中,当我们执行插入、更新及删除操作事,数据库会自动创建名为inserteddeleted的两张表。inserted表存储待插入的数据及更新后数据,deleted表存储被删除的数据及更新前数据。这两张表时看不见的。

下面我们通过触发器来验证这两张表,对触发器还不太了解的同学可以参考本站其他文章。


插入操作(insert)

首先在emp表中创建触发器,如下:

create trigger majic_insert
on emp
for insert
as
select * from inserted

此触发器的功能是:对emp表执行插入操作时,输出插入的记录。

然后执行下面的插入语句:

insert into emp values(11,'d')

此时输出如下记录:


删除操作(delete)

同样,我们创建另外一个触发器,如下:

create trigger magic_delete
on emp
for delete
as
select * from deleted

此触发器的功能是:对emp表执行删除操作时,输出被删除的记录。

然后执行如下删除语句:

delete from emp where empId=11

此时输出如下记录:


更新操作(update)

更新操作相比上面的插入和删除操作要稍微复杂一点,执行更新操作时,数据库会首先删除原纪录,然后插入新纪录。因此,根据上面的介绍,执行更新操作时会同时有inserted和deleted表。

创建更新触发器:

create trigger magic_update
on emp
for update
as
select * from inserted
select * from deleted

此触发器的功能是:对emp表执行更新操作时,同时输出新纪录及原记录。

执行如下更新语句:

update emp set empName='deepak' where empId=1

此时输出如下记录:




除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/sqlserver/893.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论