Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我真的很感谢Markov先生和David Dubois先生,他们对post有兴趣帮助我:)谢谢亲爱的,您能提供更多信息吗,您编码,对于所有受影响的记录,每次更新、插入或删除命令都会调用一次表结构触发器。如果命令影响多条记录,则插入和删除的虚拟表将有多条记录_Sql_Sql Server_Triggers_Sql Update_Sql Server 2008 Express - Fatal编程技术网

Sql 我真的很感谢Markov先生和David Dubois先生,他们对post有兴趣帮助我:)谢谢亲爱的,您能提供更多信息吗,您编码,对于所有受影响的记录,每次更新、插入或删除命令都会调用一次表结构触发器。如果命令影响多条记录,则插入和删除的虚拟表将有多条记录

Sql 我真的很感谢Markov先生和David Dubois先生,他们对post有兴趣帮助我:)谢谢亲爱的,您能提供更多信息吗,您编码,对于所有受影响的记录,每次更新、插入或删除命令都会调用一次表结构触发器。如果命令影响多条记录,则插入和删除的虚拟表将有多条记录,sql,sql-server,triggers,sql-update,sql-server-2008-express,Sql,Sql Server,Triggers,Sql Update,Sql Server 2008 Express,我真的很感谢Markov先生和David Dubois先生,他们对post有兴趣帮助我:)谢谢亲爱的,您能提供更多信息吗,您编码,对于所有受影响的记录,每次更新、插入或删除命令都会调用一次表结构触发器。如果命令影响多条记录,则插入和删除的虚拟表将有多条记录。我在回答中显示了我的第一个更新触发器,您可以看到,更新查询成功运行,并按预期更新了所有记录,但除了第一条记录外,没有为所有记录触发2table的更新触发器。Markov,我已经发布了第二个答案,通过使用游标而不是触发器中的更新查询,我已经达到


我真的很感谢Markov先生和David Dubois先生,他们对post有兴趣帮助我:)谢谢亲爱的,

您能提供更多信息吗,您编码,对于所有受影响的记录,每次更新、插入或删除命令都会调用一次表结构触发器。如果命令影响多条记录,则插入和删除的虚拟表将有多条记录。我在回答中显示了我的第一个更新触发器,您可以看到,更新查询成功运行,并按预期更新了所有记录,但除了第一条记录外,没有为所有记录触发2table的更新触发器。Markov,我已经发布了第二个答案,通过使用游标而不是触发器中的更新查询,我已经达到了我想要的结果。一切正常。但问题是,我不想使用游标,我将游标替换为基于集合的更新查询方法。@DavidDubois,正如你所说的,触发器为每个更新命令调用一次,你的意思是,不是对所有通过更新查询更新的行都调用一次?因为您知道sql是基于集合的方法,所以多条记录可以通过一个命令更新一次。您可以提供更多信息吗?您可以为每个受影响的更新、插入或删除命令调用一次表结构触发器。如果命令影响多条记录,则插入和删除的虚拟表将有多条记录。我在回答中显示了我的第一个更新触发器,您可以看到,更新查询成功运行,并按预期更新了所有记录,但除了第一条记录外,没有为所有记录触发2table的更新触发器。Markov,我已经发布了第二个答案,通过使用游标而不是触发器中的更新查询,我已经达到了我想要的结果。一切正常。但问题是,我不想使用游标,我将游标替换为基于集合的更新查询方法。@DavidDubois,正如你所说的,触发器为每个更新命令调用一次,你的意思是,不是对所有通过更新查询更新的行都调用一次?因为您知道sql是基于集合的方法,所以多个记录可以通过单个命令更新一次。通过使用游标,按预期工作,意味着对所有更新的记录触发第二个表的更新触发器。但不想使用游标,所以请帮助我使用游标,按预期工作,这意味着对所有更新的记录触发第二个表的更新触发器。但是不想使用游标,所以请帮助methis是set base方法,其中第二个表的所有记录都已成功更新,但不幸的是,第二个表的更新触发器针对已更新的第一个记录触发[即不是针对已更新的每个记录]:(这是一种基于集合的方法,其中第二个表的所有记录都已成功更新,但不幸的是,第二个表的更新触发器针对已更新的第一个记录触发[即不是针对已更新的每个记录]:(
    ALTER TRIGGER [dbo].[tbl_Inv_PurchaseNoteDetailUpdate] 
       ON  [dbo].[tbl_Inv_PurchaseNoteDetail] 
       AFTER Update
    AS 
    BEGIN
        SET NOCOUNT ON;

    Declare @RefNo as varchar(15) Declare @rate as float 
    Declare @NewNetValue as float Declare @OldNetValue as float

    select
    @RefNo=ReferenceNo,
    @rate=Rate
    from inserted 


    select 
    @NewNetValue=isnull(i.NetAmount,0), @OldNetValue=isnull(d.NetAmount,0)
    from inserted i inner join deleted d on i.id = d.id  

     --if amount changes then rate should be updated to another table 
    if  @NewNetValue<>@OldNetValue 
    begin

        ---this will update new rate in table[tbl_Inv_Ledger] 
        --but didnot fire update trigger of table[tbl_Inv_Ledger] for all record which was updated
    update dbo.tbl_Inv_Ledger
    set Rate=Rate
    where ReferenceNo=@RefNo
    ---update trigger of table[tbl_Inv_Ledger] is fired only for first record
    end     

end
ALTER TRIGGER [dbo].[tbl_Inv_PurchaseNoteDetailUpdate] 
   ON  [dbo].[tbl_Inv_PurchaseNoteDetail] 
   AFTER Update
AS 
BEGIN
    SET NOCOUNT ON;

Declare @RefNo as varchar(15) Declare @rate as float 
Declare @NewNetValue as float Declare @OldNetValue as float

select
@RefNo=ReferenceNo,
@rate=Rate
from inserted 


select 
@NewNetValue=isnull(i.NetAmount,0), @OldNetValue=isnull(d.NetAmount,0)
from inserted i inner join deleted d on i.id = d.id  

 --if amount changes then rate should be updated to another table 
if  @NewNetValue<>@OldNetValue 
begin
    -- using cursor work fine, update trigger of table[tbl_Inv_Ledger] is fired for every record
    Declare @Inv_LedgerID as numeric
    DECLARE  PurchaseNoteDetail_Cursor  CURSOR FOR
    Select ID from dbo.tbl_Inv_Ledger where ReferenceNo=@ReferenceNo 
    and FK_tbl_Inv_PurchaseNoteDetail_ID is null 
    and FK_tbl_Inv_PurchaseReturnNoteDetail_ID is null -- also check purchase return entry should not be distrubed

    OPEN  PurchaseNoteDetail_Cursor
    FETCH NEXT FROM  PurchaseNoteDetail_Cursor INTO @Inv_LedgerID
    WHILE @@FETCH_STATUS = 0
    BEGIN

    update dbo.tbl_Inv_Ledger
    set Rate=@Rate
    where ID=@Inv_LedgerID

    FETCH NEXT FROM  PurchaseNoteDetail_Cursor INTO @Inv_LedgerID
    END
    CLOSE   PurchaseNoteDetail_Cursor
    DEALLOCATE   PurchaseNoteDetail_Cursor 
end     
 -----------------xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-----------------
END