use*_*633 2 sql sql-server triggers stored-procedures atomic
我有一个SQL Server触发器.说实话,我不太确定触发器是否隐含地跟随ACID(Atomicity, Consistency, Isolation, Durability),但是我的触发器此刻并没有做任何特别复杂的事情.
现在,我想从触发器中调用存储过程.我已经TRANSACTION围绕存储过程调用和INSERT语句.
我的问题是:如果一个触发器,没有存储过程调用,是线程安全和原子的 - 至少部分是由于TRANSACTION- 将存储过程调用隐式线程安全和原子?
这是触发器的样子:
CREATE TRIGGER [triggerInsert_Foobar]
ON [Foobar]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
-- Turns on rollack if T-SQL statement raises a run-time error
SET XACT_ABORT ON
-- Start new transaction
BEGIN TRANSACTION
-- Insert statement for trigger
INSERT INTO Foo ( Col1, Col2 )
SELECT
RTRIM ( LTRIM ( Col1 ) ),
Col2
FROM
INSERTED
-- Call stored procedure (takes no parameters)
EXECUTE sp_executesql N'FoobarApp_DoSomething'
-- Complete transaction
COMMIT TRANSACTION
END;
Run Code Online (Sandbox Code Playgroud)
谢天谢地,谢谢你的帮助.
补充问题
经过一些回应后,这个问题正在准备中(谢谢).我提前道歉.
我的触发器和随后的存储过程调用是否遵循ACID原则并避免竞争条件和死锁?或者,我是否需要添加到触发器和/或存储过程中以防止竞争条件和死锁?
| 归档时间: |
|
| 查看次数: |
2248 次 |
| 最近记录: |