首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

触发器异常

2013-08-01 
触发器错误提示对象名inserted 无效-- SET ANSI_NULLS

触发器错误
提示对象名inserted 无效

-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- 针对销售订单的触发器,当审核时插入数据到lbgdxdata数据库中
-- =============================================
alter  TRIGGER lbg_SO_SOMain
   ON  SO_SOMain 
   for  UPDATE
AS 
   declare @cVerifier varchar(20),
    @sysdate varchar(50),
    @sql varchar(4000)
   set @sysdate = Datename(year,GetDate())+'-'+Datename(month,GetDate())+'-'+Datename(day,GetDate())
       +' '+Datename(hour,GetDate())+':'+Datename(mi,GetDate())+':'+Datename(second,GetDate())
    select @cVerifier=cVerifier from inserted
   if @cVerifier <>NULL or @cVerifier<>''
  begin
set @sql='insert into lbgdxdata..ky_record(djh,djrq,djlx,khbm,khmc,chbm,chmc,jldw,jldwmc,ggxh,sl,dj,je,sysdate)
              select  so1.cSOCode,so1.dDate,''销售订单'' as djlx,so1.cCusCode,so1.ccusname,so2.cInvCode,inv.cinvname,inv.cComUnitCode,cComUnitname,inv.cInvStd,iQuantity,iTaxUnitPrice,iSum,'''  + @sysdate
             + ''' from  inserted so1   
                   left join  SO_SODetails so2   on so1.csocode=so2.csocode
                   left join  customer   cus on  so1.cCusCode=cus.cCusCode
                   left join  inventory  inv on so2.cinvcode=inv.cinvcode
  
                 left join  ComputationUnit com   on inv.cComUnitCode=com.cComUnitCode' 

  exec(@sql)
                                    
  end





GO


[解决办法]
你这个inserted应该是一个表或者视图,
如果不是名字错误的话,就是你的当前数据库是不是正确,
或者试试把前面的前缀补充起来,类似dbo.inserted什么的
[解决办法]
去sql版发问吧,跟delphi没半毛钱关系啊
[解决办法]
inserted表只能是在触发器中用到,你用Exec等于是另一个过程,在这个过程中当然是无效的。改成如下:
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- 针对销售订单的触发器,当审核时插入数据到lbgdxdata数据库中
-- =============================================
alter  TRIGGER lbg_SO_SOMain
   ON  SO_SOMain 
   for  UPDATE
AS 
   declare @cVerifier varchar(20),
    /*@sysdate varchar(50),
    @sql varchar(4000)
   set @sysdate = Datename(year,GetDate())+'-'+Datename(month,GetDate())+''+Datename(day,GetDate())
       +' '+Datename(hour,GetDate())+':'+Datename(mi,GetDate())+':'+Datename(second,GetDate())
*/
    select @cVerifier=cVerifier from inserted
   if @cVerifier <>NULL or @cVerifier<>''
  begin
insert into lbgdxdata..ky_record(djh,djrq,djlx,khbm,khmc,chbm,chmc,jldw,jldwmc,ggxh,sl,dj,je,sysdate)
              select  so1.cSOCode,so1.dDate,'销售订单' as djlx,so1.cCusCode,so1.ccusname,so2.cInvCode,inv.cinvname,inv.cComUnitCode,cComUnitname,inv.cInvStd,iQuantity,iTaxUnitPrice,iSum,convert(varchar(20),getdate(),120) as sysdate  from  inserted so1   
                   left join  SO_SODetails so2   on so1.csocode=so2.csocode
                   left join  customer   cus on  so1.cCusCode=cus.cCusCode
                   left join  inventory  inv on so2.cinvcode=inv.cinvcode


                 left join  ComputationUnit com   on inv.cComUnitCode=com.cComUnitCode 
if @@Error<>0 or @@Rowcount=0
begin
  raiserror(N'失败',16,1)
  rollback tran
  return
end
                       
  end

热点排行