Sql-Server

事務中的觸發器是否僅在事務送出時觸發?

  • November 10, 2016

我是一名開發人員,但我求助於 dba 社區來解決以下問題。

我正在用 C# 編寫集成測試。在這個測試中,我首先啟動一個事務,並且總是回滾,因此無論測試成功還是失敗,都不會向數據庫送出任何內容。

開始事務後,我在表中插入一些東西。在這個表上有一個插入觸發器,但我覺得這個觸發器只有在我送出事務時才會觸發。

這是真的?

有沒有辦法讓我在事務中觸發觸發器?

所以在執行時發生的是:

  • 插入表 A

    • 觸發器被觸發並插入表 B

我的測試中發生的是:

  • 開啟交易
  • 插入表 A
  • 檢查表 B –> 未執行插入

我對實體框架一無所知,但在以下使用 Sql Server Management Studio 針對本地實例的基本測試中,似乎觸發器在完成插入表 dbo.Test1 時觸發,我可以立即看到行dbo.Test2 在發出 COMMIT 之前

USE [Test]
GO
IF OBJECT_ID('dbo.Test1', 'U') IS NOT NULL 
   DROP TABLE dbo.Test1
GO
IF OBJECT_ID('dbo.Test2', 'U') IS NOT NULL 
   DROP TABLE dbo.Test2
GO
CREATE TABLE [dbo].[test1](
   [col1] [char](3) NULL
) ON [PRIMARY]

GO
CREATE TABLE [dbo].[test2](
   [col1] [char](3) NULL
) ON [PRIMARY]

GO
CREATE TRIGGER dbo.Test1Trigger 
  ON  dbo.Test1
  AFTER INSERT,DELETE,UPDATE
AS 
BEGIN
   SET NOCOUNT ON;

   INSERT INTO dbo.Test2 select * from inserted

END
GO
begin transaction
insert into dbo.test1 (col1) values('abc')
select * from dbo.test2     --The row comes out of the select without issuing a commit
--insert into dbo.test2 (col1) values('xyz')
--commit
--select * from dbo.test2
--rollback

引用自:https://dba.stackexchange.com/questions/154810