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没有被执行。是不是视图这能用在物理表上?镜像表上不能用?如果可以用请高手赐教怎么样才能达到我想要的目的
  谢谢。

解决方案 »

  1.   

    INSTEAD OF 是指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
    你又不是往视图里插数据,如果是往视图里插入数据是可以触发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
      

  2.   

    用法不正确:
    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'
      

  3.   

    use test
    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 行)