1、电脑也是按顺序第一个或最后一个执行呀!你可以做个实验呀! 2、那是替代操作触发器如: create table 表1(a int,b int) go create table 表2(a int,b int) go CREATE TRIGGER 名 on 表1 INSTEAD OF INSERT AS INSERT 表2 SELECT * FROM inserted go ----测试: insert 表1 values(1,2) select * from 表1 select * from 表2 3、 视图只能用替代操作触发器!
大力兄弟我做了一个实验,建立了一个视图 CREATE VIEW dbo.VIEW1 AS SELECT b, a FROM dbo.表1 并在视图上建立了这样一个触发器 CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] instead of INSERT AS insert 表2 values(33,33) 但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变. 当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.
楼上的兄弟说的不错,经过我的实验也是如此,但能帮我看看顺便帮我看看视图的问题吗 1、建立视图会破坏原表的索引?数据量大时会影响查询速度。 2、表结构更改后必须重建视图如何抓取表结构的变化。 3、CREATE VIEW dbo.VIEW1 AS SELECT b, a FROM dbo.表1 并在视图上建立了这样一个触发器 CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] instead of INSERT AS insert 表2 values(33,33) 但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变. 当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.谢谢如何愿意的话!
先回答上面的: 3、在视图上定义触发器与定义表触发器有何差异? a、视图上只能定义INSTEAD OF 触发器 b、视图上定义触发器可以很好的解决视图更新问题 c、一般视图上触发器解决视图更新和删除问题,使得利用视图更方便直观表触发器可以解决一些业务规则问题。 后面的问题: 1、建立视图会破坏原表的索引?数据量大时会影响查询速度。 建立视图会破坏原表的索引???没有这个说法!!!2、表结构更改后必须重建视图如何抓取表结构的变化。 表结构更改属于非正常操作,讨论这个问题没有很大的实际意义。3、CREATE VIEW dbo.VIEW1 AS SELECT b, a FROM dbo.表1 并在视图上建立了这样一个触发器 CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] instead of INSERT AS insert 表2 values(33,33) 但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变. 当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.这个我试过,没有你说的情况,应该是表2的增加了一条33,33的纪录,表1没有变化,这个结果是对的,instead of的提袋就是这个意思。 对于视图触发器,最好的例子是: create view test_view as select a.id,b.id as bid,a.avalue,b.bvalue from a,b where a.id=b.aid --这里a试主表,b是从表,1对多关系,两个表的主键是id。 go CREATE TRIGGER [TR_view1] ON [dbo].[test_VIEW] instead of update ASupdate a set avalue=i.avalue from inserted i where a.id=i.idupdate b set bvalue=i.bvalue from inserted i where b.id=i.bidgo实现视图更新。
CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] instead of update ASupdate a set a.a=i.a from inserted i where a.a=i.aupdate b set b.a=i.ba from inserted i where b.a=i.ba**update a **set a.a=20 为什么带**的这段语句没有执行
CREATE VIEW dbo.VIEW1 AS SELECT b, a FROM dbo.表1 并在视图上建立了这样一个触发器 CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] instead of INSERT AS insert 表2 values(33,33) goinsert view1 values(1,2) select * from table1-----------无数据 select * from table2-----------有数据
楼上的兄弟,为什么打开视图直接操作好像instead of 触发器不起作用,直接将数据插入了table1,如何在查询分析器中操作结果如你所示.再重申******说个具体的应用场合(视图触发器)****
2、那是替代操作触发器如:
create table 表1(a int,b int)
go
create table 表2(a int,b int)
go
CREATE TRIGGER 名 on 表1
INSTEAD OF INSERT
AS
INSERT 表2 SELECT * FROM inserted
go
----测试:
insert 表1 values(1,2)
select * from 表1
select * from 表2
3、
视图只能用替代操作触发器!
CREATE VIEW dbo.VIEW1
AS
SELECT b, a
FROM dbo.表1
并在视图上建立了这样一个触发器
CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1]
instead of INSERT
AS
insert 表2 values(33,33)
但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变.
当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.
2、INSTEAD OF 触发器是代替触发器,也就是说只执行触发器的内容,而不执行触发触发器的语句,这个和after触发器完全不同,after触发器先执行语句,在执行触发器。
2.1、“****DELETE 语句不指定对现有数据类型的修改。DELETE 语句只指定要删除的行。传递给 DELETE 触发器的 inserted 表总是空的。发送给 DELETE 触发器的 deleted 表包含在发出 UPDATE 语句前就存在的行的映像。如果在视图或表上定义 INSTEAD OF DELETE 触发器,则 deleted 表的格式以为视图定义的选定列表的格式为基础。***” 这句话的意思是DELETE 语句触发的触发器里inserted 表总是空的,没有记录,只有DELETEd表有记录,DELETEd表的表结构和DELETE 语句涉及的表或者视图的结构相同,包括字段名、字段类型和字段次序。3、现在有事,容后回答。
1、建立视图会破坏原表的索引?数据量大时会影响查询速度。
2、表结构更改后必须重建视图如何抓取表结构的变化。
3、CREATE VIEW dbo.VIEW1
AS
SELECT b, a
FROM dbo.表1
并在视图上建立了这样一个触发器
CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1]
instead of INSERT
AS
insert 表2 values(33,33)
但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变.
当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.谢谢如何愿意的话!
3、在视图上定义触发器与定义表触发器有何差异?
a、视图上只能定义INSTEAD OF 触发器
b、视图上定义触发器可以很好的解决视图更新问题
c、一般视图上触发器解决视图更新和删除问题,使得利用视图更方便直观表触发器可以解决一些业务规则问题。
后面的问题:
1、建立视图会破坏原表的索引?数据量大时会影响查询速度。
建立视图会破坏原表的索引???没有这个说法!!!2、表结构更改后必须重建视图如何抓取表结构的变化。
表结构更改属于非正常操作,讨论这个问题没有很大的实际意义。3、CREATE VIEW dbo.VIEW1
AS
SELECT b, a
FROM dbo.表1
并在视图上建立了这样一个触发器
CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1]
instead of INSERT
AS
insert 表2 values(33,33)
但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变.
当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.这个我试过,没有你说的情况,应该是表2的增加了一条33,33的纪录,表1没有变化,这个结果是对的,instead of的提袋就是这个意思。
对于视图触发器,最好的例子是:
create view test_view
as
select a.id,b.id as bid,a.avalue,b.bvalue
from a,b
where a.id=b.aid --这里a试主表,b是从表,1对多关系,两个表的主键是id。
go
CREATE TRIGGER [TR_view1] ON [dbo].[test_VIEW]
instead of update
ASupdate a
set avalue=i.avalue
from inserted i
where a.id=i.idupdate b
set bvalue=i.bvalue
from inserted i
where b.id=i.bidgo实现视图更新。
instead of update
ASupdate a
set a.a=i.a
from inserted i
where a.a=i.aupdate b
set b.a=i.ba
from inserted i
where b.a=i.ba**update a
**set a.a=20
为什么带**的这段语句没有执行
AS
SELECT b, a
FROM dbo.表1
并在视图上建立了这样一个触发器
CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1]
instead of INSERT
AS
insert 表2 values(33,33)
goinsert view1 values(1,2)
select * from table1-----------无数据
select * from table2-----------有数据
你自己多做实验就回明白了!