CREATE VIEW vi_ss
AS
SELECT a.id,a.xm,a.xb,b.kc,b.cj
 FROM a,b
WHERE a.id=b.id
UNION
SELECT a.id,a.xm,a.xb,c.kc,c,cj
  FROM a,c
WHEEW a.id=b.id
这里的条件是不是写错了,应该是where a.id=c.id

解决方案 »

  1.   

    将你的操作过程写出来.触发器的代码是没错的,加上print(@id)也不会错.问题应该是出在你的程序代码上
      

  2.   

    我没有写程序代码啊,我直接在sqlserver中测试的
      

  3.   

    我在查询分析器中改过,不会错啊,下面是我的语句:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tr_view_update]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
    drop trigger [dbo].[Tr_view_update]
    GOCREATE TRIGGER Tr_view_update ON  vi_ss
    INSTEAD OF  UPDATE
    AS
       declare @id char(15),@temp char(15),@cj decimal(18,0)
              select  @id=id,@cj=cj from inserted
              select  @temp=id from b where id=@id
          print(@id)  --加了这句
          if rtrim(@temp) is null
              begin 
                  update  c
                    set cj=@cj
                    where id=@id
               end
           else
              begin 
                  update  b
                    set cj=@cj
                    where id=@id
                end 
      

  4.   

    我修改一下触发器的代码,然后应用就出现了一下错误
    Microsoft SQL-DMO
    错误5:[SQL-DMO]代码执行异常错误:EXCEPTION_ACCESS_VIOLATION
    csdn论坛上能贴图吗
      

  5.   

    但是我在修改这个触发器的时候,我要在原代码中加入像print(@id)在保存的时候就出现这样的错误:
       错误5:[SQL-DMO]代码执行异常错误:EXCEPTION_ACCESS_VIOLATION
    不知道这是为什么
    1.在TRIGGER中交PRINT是不会有问题的,但没有意义,你无法获得OUTPUT的值。
    2.效率低下,还是换一种方法来实现,比如STORED PROCEDURE。