2016-09-28 90 views
0

我有两个表abstractDetails和auditAbstractDetails。我有一个Web表单,从一个人提交有关抽象(标题,背景,目标等)的详细信息,并将值插入到abstractDetails表中。更新触发工作不正常

现在我写了一个触发器,所以无论何时一个人更新他的表单并再次提交,它应该将新值填充到abstractDetails中,以及它应该填充AuditabstractDetails表中的旧值和新值(标题,背景,目标..... auditTitle,auditBackground .....)

旧值应在列标题AuditabstractDetails表存储,背景等,以及新的值将被列auditTitle,auditBackground等)下保存

这里是我的触发器:

USE [Abstract] 
GO 

/****** Object: Trigger [dbo].[trgAuditabstractDetails] Script Date: 09/28/2016 11:45:29 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TRIGGER [dbo].[trgAuditabstractDetails] 
ON [dbo].[abstractDetails] 
FOR UPDATE 
AS 
BEGIN 

    SET NOCOUNT ON 
    delete from AuditabstractDetails where Id IN (SELECT I.Id 
    FROM Inserted I); 
    insert into AuditabstractDetails(Id, abstractInfoId, title, background, 
    objective, design, result, Audittitle, Auditbackground, 
    Auditobjective, Auditdesign, Auditresult) 
    -- case 1: ID unchanged 
    SELECT I.Id, I.abstractInfoId, D.title, D.background, D.objective, 
    D.design, D.result, 
    I.title, I.background, I.objective, I.design, I.result 
    FROM Inserted I 
    JOIN Deleted D on I.Id=D.Id; 
END 
GO 

在此之后,当我(通过编辑abstractDetails表中的值从DB)更新从后端的abstractDetails表格形式(标题,背景等)的值,它是工作完美。但是,当我通过表单更新它并提交它时,它正在更新两个列(title,auditTitle等)中的新值。它不会将旧值存储在特定列中,而是将新值存储在两列中。

abstractDetails table 
=========================================== 
Id |title | background | Result 
------------------------------------------- 
1 Abs1 backAbs2  resAbs2 
2 Abs2 backAbs2  resAbs2 
------------------------------------------- 

Expected Result: 

AuditabstractDetails table 
=============================================== 
Id |title | background | Result | AuditTitle | auditBackground |auditResult 
---------------------------------------------------------------------------- 
1 Abs1 backAbs2 resAbs2 Audit1  auditback1  auditres1 
2 Abs2 backAbs2 resAbs2 Audit2  auditback2  auditres2 
---------------------------------------------------------------------------- 

ActualResult: 

AuditabstractDetails table 
=============================================== 
Id |title | background | Result | AuditTitle | auditBackground |auditResult 
---------------------------------------------------------------------------- 
1 Audit1 auditback1 auditres1 Audit1  auditback1  auditres1 
2 Audit2 auditback2 auditres2 Audit2  auditback2  auditres2 
---------------------------------------------------------------------------- 

需要帮助

+0

你触发删除插入的值,并再次做同样的,它只是仅适用于更新部分,也即当只有单值从什么是插入,更新部分 – TheGameiswar

+0

我最终的结果inserted..please更新的问题返回已删除插入的部分 –

+1

当插入包含多于1行时,您的删除语句将失败。您应该将其更改为IN或联接。 –

回答

0

这听起来像问题不动了扳机,但与任何的储蓄数据。如果它从SQL Server按照需要运行,但在UI进行调用时失败,那么您需要检查UI以查看发生了什么。 UI很可能不止一次地更新记录。我会通过删除触发器的delete部分并查看最终在审计表中找到多少行来测试此操作。