gpt4 book ai didi

sql-server - 如何在 T-SQL 事务外执行插入和更新

转载 作者:行者123 更新时间:2023-12-02 18:37:01 25 4
gpt4 key购买 nike

我在 SQL Server T-SQL 中有存储过程,这些过程是在事务范围内从 .NET 调用的。

在我的存储过程中,我正在对一些审核表进行一些日志记录。我在审计表中插入一行,然后在事务中通过更新的方式填充更多信息。

我发现,如果几个人同时尝试同一件事,其中一两个人将成为事务死锁的受害者。目前,我假设当我插入审计表时发生某种锁定。

我想在我正在执行的事务之外执行对审计表的插入和更新,这样即使事务回滚,审计仍然会发生。我希望这可以阻止任何锁定的发生,从而允许多个人同时执行该过程。

任何人都可以帮我在 T-SQL 中做到这一点吗?

谢谢,丰富

更新 - 由于 Josh 建议使用 SQL Profiler 来追踪死锁的根源,我发现审核与事务死锁无关。

最佳答案

TranactionScope 支持抑制:

using (TransactionScope scope = new TransactionScope())
{

// Transactional code...


// Call a SQL stored procedure (but suppress the transaction)
using (TransactionScope suppress = new TransactionScope(TransactionScopeOption.Suppress))
{
using (SqlConnection conn = new SqlConnection(...))
{
conn.Open();
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.CommandText = "MyStoredProcedure";
int rows = (int)sqlCommand.ExecuteScalar();
}
}

scope.Complete();

}

但我不得不质疑为什么日志记录/审计会在事务之外运行?如果事务回滚,您仍然会拥有已提交的审核/日志记录,但这可能不是您想要的。

您没有提供太多有关如何记录的信息。您的审计表是否有外键指向您的主要事件表?如果是这样,请删除外键(假设审核记录仅来自“已知”应用程序)。

关于sql-server - 如何在 T-SQL 事务外执行插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com