客户端与服务器端数据库事务

l33*_*33t 5 sql-server transactions

事务可以在SQL Server客户端或服务器代码中执行。一位数据库专家曾经告诉我,由于锁定问题,应该避免客户端事务。现在,几年后,我想知道这是否仍然成立。

当然,在某些情况下客户端事务是必要的,但我们假设可以使用客户端或服务器端事务来解决特定问题。

就性能而言,这两种技术哪一种最好?为什么?

C#(客户端):

using (var transaction = new TransactionScope())
{
    // Insert data into database.

    transaction.Complete();
}
Run Code Online (Sandbox Code Playgroud)

T-SQL(服务器):

CREATE PROCEDURE [dbo].[my_proc]
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @TransactionCount [int]

    BEGIN TRY
        SET @TransactionCount = @@TRANCOUNT

        IF @TransactionCount = 0
            BEGIN TRANSACTION

        -- Insert data

        IF @TransactionCount = 0
            COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        IF XACT_STATE() <> 0 AND @TransactionCount = 0 
            ROLLBACK TRANSACTION

        ; THROW
    END CATCH
END
GO
Run Code Online (Sandbox Code Playgroud)

小智 5

服务器端事务更加高效。这样想吧。如果您在客户端启动事务,那么服务器必须知道事务正在进行才能提交或回滚。这也导致客户端应用程序和数据库服务器之间有更多的通信。