CREATE TRIGGER LinkSumig
ON CheckView3
INSTEAD OF INSERT
AS
BEGIN
SELECT * INTO Temp0 FROM TempShitDate
SELECT * INTO Temp1 FROM Attendence.dbo.CheckView3
END我在checkview3上建立了一个触发器,checkview3的数据是从几基表select来的。为什么我的一个基表的数据发生了改变。checkview3的数据也发生了改变时。这个TRIGGER没有被执行。是不是视图这能用在物理表上?镜像表上不能用?如果可以用请高手赐教怎么样才能达到我想要的目的
谢谢。
ON CheckView3
INSTEAD OF INSERT
AS
BEGIN
SELECT * INTO Temp0 FROM TempShitDate
SELECT * INTO Temp1 FROM Attendence.dbo.CheckView3
END我在checkview3上建立了一个触发器,checkview3的数据是从几基表select来的。为什么我的一个基表的数据发生了改变。checkview3的数据也发生了改变时。这个TRIGGER没有被执行。是不是视图这能用在物理表上?镜像表上不能用?如果可以用请高手赐教怎么样才能达到我想要的目的
谢谢。
你又不是往视图里插数据,如果是往视图里插入数据是可以触发BEGIN和END中的两个语句的。比如有一下形式是可以触发的:create table t1(a int)
create view CheckView3 as select * from t1 --这是一个可更新视图
然后执行
CREATE TRIGGER LinkSumig
ON CheckView3
INSTEAD OF INSERT
AS
BEGIN
SELECT * INTO Temp0 FROM TempShitDate
SELECT * INTO Temp1 FROM Attendence.dbo.CheckView3
END再执行insert into CheckView3 values(1)
SELECT * FROM Temp0
SELECT * FROM Temp1
create table t1(ID int primary key,Name nvarchar(2))
create table t1(ID int primary key,Name nvarchar(2))
go
create view CheckView3
as
select [ID]=t1.ID,[col]=t1.Name,[col2]=t2.Name
from
t1
join
t2 on t1.ID=t2.IDgo
create trigger CheckView3_insert on CheckView3
instead of insert
as
begin
insert t1(ID,Name) select ID,col from inserted
insert t2(ID,Name) select ID,col2 from inserted
end
go
insert CheckView3 select 1,'a','b'
go
用法不正确:create table t1(ID int primary key,Name nvarchar(2))
create table t2(ID int primary key,Name nvarchar(2))
go
create view CheckView3
as
select [ID]=t1.ID,[col]=t1.Name,[col2]=t2.Name
from
t1
join
t2 on t1.ID=t2.IDgo
create trigger CheckView3_insert on CheckView3
instead of insert
as
begin
insert t1(ID,Name) select ID,col from inserted
insert t2(ID,Name) select ID,col2 from inserted
end
go
insert CheckView3 select 1,'a','b'go
select * from CheckView3
ID col col2
----------- ---- ----
1 a b(所影响的行数为 1 行)