在 SQL Server
事务可以在客户端或服务器代码中执行。一位数据库专家曾告诉我,由于锁定问题,应该避免客户端事务。现在,几年后,我想知道这是否仍然适用。
当然,有些场景需要客户端事务,但让我们假设可以使用客户端或服务器端事务解决特定问题。
在性能方面,这两种技术中哪一种最好?为什么?
C#(客户端):
using (var transaction = new TransactionScope())
{
// Insert data into database.
transaction.Complete();
}
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
最佳答案
服务器端事务更高效。这么想吧。如果您在客户端启动事务,则服务器必须知道事务正在进行中才能提交或回滚。这也会导致客户端应用程序和数据库服务器之间进行更多的通信。
关于sql-server - 客户端与服务器端数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330777/