В 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