2013-05-28 32 views
0

我有一個觸發器,用於跟蹤已刪除的事務。它將前後交易記錄值存儲到名爲TransHistory的不同表中。問題是,當我刪除一條記錄時,它不僅存儲了已刪除的記錄,而且在此之前,它將存在於我的DataGridView中的最高記錄作爲更新插入到任何客戶中。這是我刪除觸發器:有問題的觸發器 - 刪除

USE [dbPB] 
GO 
/****** Object: Trigger [dbo].[delete_history] Script Date: 05/28/2013 19:40:13  ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER On 
GO 

ALTER TRIGGER [dbo].[delete_history] ON [dbo].[Transaction] 
FOR DELETE 
AS 
INSERT TransHistory (CustomerID, TransactionID, Buyin, 
         Cashout, CreditPaid, Type, 
         Date, action) 
SELECT CustomerID, TransactionID, Buyin, Cashout, 
    CreditPaid, Type, GETDATE(), 'DELETED' 
FROM deleted 

,這裏是我的UPDATE觸發器:

USE [dbPB] 
GO 
/****** Object: Trigger [dbo].[update_history] Script Date: 05/28/2013 20:24:28  ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER TRIGGER [dbo].[update_history] ON [dbo].[Transaction] 
FOR UPDATE 
AS 
INSERT TransHistory (CustomerID, TransactionID, Buyin, 
         Cashout, CreditPaid, Type, 
         Date, action) 
SELECT top (1) CustomerID,TransactionID, Buyin, Cashout, CreditPaid, Type, 
      GETDATE(), 'BEFORE UPDATE' 
FROM deleted 

INSERT TransHistory (CustomerID, TransactionID, Buyin, Cashout, 
         CreditPaid, Type, 
         Date, action) 
SELECT top(1) CustomerID, TransactionID, Buyin, Cashout, CreditPaid, Type, 
      GETDATE(), 'AFTER UPDATE' 
FROM inserted 
+1

您是否在刪除記錄時運行了分析器? –

+0

我不確定...這是我的第一個觸發器 – alwaysVBNET

+0

因此,當您執行「DELETE」時,兩個觸發器都會執行嗎? –

回答

1

我想您發送更新和刪除。我將使用分析器來查看當觸發器被刪除調用時發送到數據庫的內容。您可以嘗試從SSMS而不是應用程序執行刪除語句,您將在Profiler中看到只有刪除語句已發送,並檢查數據以查看是否僅觸發刪除觸發器。然後從應用程序執行相同的操作,並看到發送兩個命令而不是一個。至少這會告訴你,如果問題是觸發器或應用程序,但我打賭應用程序。

+0

。我已經直接從數據庫中刪除了一條交易記錄,並且只有已刪除的記錄存儲在數據庫中。因此,應用程序會產生問題。但因爲我想在我的數據網格中的最新(更新)的信息,我應該如何處理?謝謝! – alwaysVBNET

+0

好的,這是問題所在。下面這行代碼用於通過數據集更新數據庫:Me.TransactionTableAdapter.Update(Me.DbPBDataSet)你們知道我應該使用什麼來代替更新嗎? – alwaysVBNET

+1

我不是一個應用程序的人,你可能想對此做一個單獨的問題來吸引那些是的人,但是你應該選擇網格的數據而不是更新它。 – HLGEM