Sql-Server
事務中的觸發器是否僅在事務送出時觸發?
我是一名開發人員,但我求助於 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