我们可以创建临时表触发和交易?
当用户将插入数据的话,如果它致力于则触发将被解雇,并且该数据会从临时表进入实际表。
当SQL服务将停止,或服务器将被关闭,那么临时表会被自动删除。
或应当我使用的另一个实际的表,其中第一数据将被插入,然后,如果它是致力于则触发将被发射以及所述数据将被发送到主表,然后我将执行一个截查询来删除数据从接口表,因此,除去重复的数据。
我们可以创建临时表触发和交易?
当用户将插入数据的话,如果它致力于则触发将被解雇,并且该数据会从临时表进入实际表。
当SQL服务将停止,或服务器将被关闭,那么临时表会被自动删除。
或应当我使用的另一个实际的表,其中第一数据将被插入,然后,如果它是致力于则触发将被发射以及所述数据将被发送到主表,然后我将执行一个截查询来删除数据从接口表,因此,除去重复的数据。
我不认为你明白触发器 - 触发器触发是与他们有关,而不是事务提交时的发言。 两个脚本:
脚本1:
create table T1 (
ID int not null,
Val1 varchar(10) not null
)
go
create table T2 (
ID int not null,
Val2 varchar(10) not null
)
go
create trigger T_T1_I
on T1
after insert
as
insert into T2 (ID,Val2) select ID,Val1 from inserted
go
begin transaction
insert into T1 (ID,Val1)
select 10,'abc'
go
RAISERROR('Run script 2 now',10,1) WITH NOWAIT
WAITFOR DELAY '00:01:00'
go
commit
脚本2:
select * from T2 with (nolock)
打开两个连接到同一个数据库,把一个脚本在每个连接。 运行脚本1。当显示消息“运行脚本2现在”,切换到其他连接。 你会看到,你能够从T2选择未提交的数据,即使该数据由触发器插入。 (这也意味着正在举行适当的锁在T2由脚本1,直到触发提交)。
因为这意味着你问什么就相当于是只插入基表并保持您的交易公开,你能做到这一点。
如果你想隐藏的表从用户的实际形状,创建一个视图 ,并写在触发更新基表。 如上文所述,虽然,只要你对视图进行DML操作,触发器会已经解雇,你会保持基本表锁。 根据其它连接的事务隔离级别,他们可能会看到你的变化,或者被阻塞,直到事务提交。
触发器不能在临时表中创建。 但它是一个不寻常的要求这样做。
临时表可以是交易的一部分,但表变量不能。
作为@Damien指出,触发器不火的时候,交易将提交的,而当它们在表中的动作(INSERT,UPDATE,DELETE)与相应的触发火灾发生。
或者创建您可以将数据插入视图。 它会写回表,然后触发将闪光。