2016-09-28 14 views
0

私は2つのテーブルabstractDetailsとauditAbstractDetailsを持っています。私は抽象的な(タイトル、背景、目的など)についての詳細を提出し、抽象的な詳細テーブルに値を挿入するWebフォームを持っています。更新トリガーが正しく機能しない

私は人が自分のフォームを更新して再度送信するたびに、AbstractDetailsに新しい値を入力し、AuditabstractDetailsテーブル(title、background、objective)に古い値と新しい値を入力する必要があります。 ..... 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テーブルの値(abstractDetailsテーブルの値を編集してDBから)をバックエンドから更新すると、完璧に動作しています。しかし、私はフォームを介してそれを更新し、それを提出するとき、それは両方の列(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パーツを削除しました –

+1

Insertedに2つ以上の行が含まれていると、deleteステートメントが失敗します。これをINまたは結合に変更する必要があります。 –

答えて

0

を助ける必要があります。 SQL Serverから必要に応じて動作しますが、UIがコールしているときに失敗する場合は、UIをチェックして何が起こっているかを確認する必要があります。 UIがレコードを複数回更新しているようです。私はあなたのトリガーの部分をdelete部分を取り除いて、あなたの監査テーブルで終わる行の数を見てこれをテストします。

関連する問題