这里,我将会解释什么是Magic Table,还有如何在 SQL Server 获取它.
这种信息可以从 SqlServer Trigger 服务处获取到.
被“插入” 和 “删除” 的表被称为 SQL Server 的魔术表. 我们不能再数据库中看到这些表,但是我们从触发器”Trigger“处访问这些表 . 这些表由SQL Server内存自动创建并管理,来管理在一个数据库表中DML操作(插入,更新,删除)期间最近被插入、删除和更新的值.
通常,逻辑表触发器用于如下目的:
识别错误的数据
检测数据对表的影响
当我们想表中插入数据是, 魔术表 “Inserted” 将会被创建并且持有当前插入的行. 我们可以使用“Trigger”来访问他们。
Create table LogMessage (Empid varchar(4),EmpName varchar(50),Message varchar(50))
Create table Emp (Empid varchar(4),EmpName varchar(50))
Create Trigger LogDisplay On Emp for Insert As Select * from Inserted Select * from Deleted Go
Create Trigger LogInserted On Emp for Insert As Declare @EmpId varchar(4) Declare @EmpName varchar(50) Select @EmpId=(Select EmpId from Inserted)--get data for Inserted Logic Table Select @EmpName=(Select Empname from Inserted) )--get data for Inserted Logic Table Insert into LogTable (EmpId,EmpName,Message) values(@EmpId,@EmpName,'Record Added') --Save Current row in LogTable Go
Insert into Emp (EmpId,EmpName) values('S001','Ravindra')
LogDisplay
LogInserted
当我们从表中删除数据时,魔术表 “Deleted”将会被创建并且持有当前删除行。我们可以从“trigger”.访问他们。
Create Trigger LogDisplayDel On Emp for Delete As Select * from Inserted Select * from Deleted Go
Create Trigger LogDelete On Emp for Delete As Declare @EmpId varchar(4) Declare @EmpName varchar(50) Select @EmpId=(Select EmpId from Deleted) Select @EmpName=(Select Empname from Deleted) Insert into LogTable (EmpId,EmpName,Message) values(@EmpId,@EmpName,'Record Deleted') Go
Delete from Emp where Empid='s001'
我们不能创建逻辑表或修改逻辑表中的数据。
select * from logTable
注意:如果你使用Truncate命令,触发器不会被触发。
truncate table Emp
我们可以在SQL Server中使用触发器魔术表得到当前插入,更新和删除的行。
参考 http://www.dotnet-shrikant.com/,获取更多信息。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务