SQL 服务器触发器中的存储过程调用是否隐含线程安全和原子性?

Is a stored procedure call inside a SQL Server trigger implictly thread safe and atomic?

我有一个 SQL 服务器触发器。老实说,我不太确定触发器是否隐含地遵循 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;

谢谢您的帮助。

补充问题

这个问题是在已经有一些回答(谢谢)之后准备的。我提前道歉。

我的触发器和存储过程的后续调用是否遵循 ACID 原则并避免竞争条件和死锁?或者,我是否需要向我的触发器 and/or 添加一些东西来防止竞争条件和死锁?

底层操作和触发操作被视为原子操作。他们都在一个事务中提交。来自 the documentation:

The trigger and the statement that fires it are treated as a single transaction...

请注意,触发器(SP 将调用)不会看到触发触发器的 table 更改。它还没有提交。