日期:2014-05-18  浏览次数:20393 次

高人请帮看看---------------这个触发器,应该怎么写呢?
是这样的,有一个Review的表,当这个表里有新增记录,如果status='批准'后,则在应收款表AR
中产生一条记录,记录里要调用另一个主表Project里的相同ProjectNO的信息.

全部有主键的,
为什么我在SQL企业管理器里,就可以正常,但如果是DELPHI里操作时,会报错呢?
错误为:"无法为更新定位行,一些值已经改变"

高人帮分析一下,谢了,

SQL code

CREATE TRIGGER [NewArPay] ON [dbo].[Review] 
AFTER insert
AS
--SET   NOCOUNT   ON 
  if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
      return
    declare @name nvarchar(20)
    select @name = ResultStatus from inserted

    if @name = '批准'
           begin
        Insert into AR(DueDate,ProjectNO,ClientID,ClientName,Type,Cost,Remark) 
        select enddate,ProjectNO,clientid,clientname,'管理费',cost ,'系统自动生成' from Project
        where status='申请中' and ProjectNO in (Select ProjectNO from Inserted )
           end
go


------解决方案--------------------
SQL code

CREATE TRIGGER [NewArPay] ON [dbo].[Review] 
AFTER insert
AS
--SET   NOCOUNT   ON 
  if @@rowcount = 0 --如果影响的行数为 0,则结束触发器运行,避免占用资源
      return
                    begin
        Insert into AR(DueDate,ProjectNO,ClientID,ClientName,Type,Cost,Remark) 
        select enddate,ProjectNO,clientid,clientname,'管理费',cost ,'系统自动生成' from Project
        where status='申请中' and ProjectNO in (Select ProjectNO from Inserted WHERE ResultStatus='批准')
           end
go