问题标签 [sqltransaction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
85534 浏览

sql - 在 BEGIN/END TRANSACTION 中执行存储过程

如果我在 SQL 中创建一个存储过程并EXEC spStoredProcedure在 BEGIN/END TRANSACTION 中调用它(),那么这个其他存储过程是否也属于该事务?

我不知道它是否像 C# 中的 try/catch 一样工作。

0 投票
8 回答
56678 浏览

c# - 为什么使用带有 SqlTransaction 的 using 语句?

我遇到了一些关于我在代码中使用的 SqlTransaction 的问题。在我的谷歌搜索过程中,我看到很多人使用带有 SqlTransaction 的 using 语句。

将这种类型的语句与 SqlTransaction 一起使用有什么好处和/或区别?

目前我的代码如下所示:

一种方式比另一种方式有什么优势?

0 投票
2 回答
1021 浏览

sql-server - 如何减少批处理 nvarchar(max) 更新的事务日志增长

我们的应用程序需要向 SQL Server 2005 数据库添加大量文本(单条记录最多 1 GB)。出于性能原因,这是通过对每个块进行存储过程调用(例如,usp_AddChunk)以块的形式完成的。usp_AddChunk 没有任何显式事务。

我看到的是,将块大小从 100MB 减少到 10MB 会导致事务日志大大增加。有人告诉我这是因为每次调用 usp_AddChunk 时,“隐式”(我的术语)事务都会记录所有现有文本。因此,对于 150MB 的记录:

100MB 块大小:100(记录 0 字节)+ 50(记录 100 MB)= 记录 100 MB

会小于

10 MB 块大小:10(记录 0 字节)+ 10(记录 10 MB)+ 10(记录 20 MB)... + 10(记录 140 MB)= 记录 1050 MB

我认为通过在我的 C# 代码中打开一个事务(在我添加第一个块之前,并在最后一个块之后提交),这个“隐式”事务不会发生,我可以避免巨大的日志文件。但我的测试显示,使用 ADO.NET 事务的事务日志增长了 5 倍。

我不会发布代码,但这里有一些细节:

  1. 我打电话给 SqlConnection.BeginTransaction()
  2. 我为每个块使用不同的 SqlCommand
  3. 我将(1)中的 SqlTransaction 分配给每个 SqlCommand
  4. 我通常在每次 SqlCommand 执行后关闭连接,但我也尝试过不关闭连接,结果相同

这个方案有什么缺陷?如果您需要更多信息,请告诉我。谢谢!

注意:不能选择使用简单或批量日志恢复模式

0 投票
1 回答
2034 浏览

sqlconnection - CommandBuilder 和 SqlTransaction 插入/更新行

我可以让它工作,但我觉得我做得不好。

第一次运行时,它按预期工作,并在“thisField”包含“doesntExist”的位置插入新行

但是,如果我随后运行它,我会收到一个运行时错误,我无法插入重复键,因为它违反了主键“thisField”。

即使我可以通过移动 AcceptChanges 的反复试验或在 Begin/EndEdit 中封装更改来实现这一点,然后我开始遇到“并发冲突”,它不会更新更改,而是告诉我它失败了更新 1 个受影响行中的 0 个。

有什么疯狂的明显我想念的吗?

0 投票
3 回答
8229 浏览

c# - 单个 sqlconnection 中的多个 sqltransactions

我有一些要执行的代码,如下所示。但是我在第二次迭代中不断收到异常“此 SqlTransaction 已完成;它不再可用”。有人可以帮我指出我在这里做错了什么吗?谢谢!

0 投票
3 回答
1474 浏览

c# - 如何将这些调用放在 SqlTransaction 中?

对于我的 ASP.NET 4.0 应用程序,我有一个包含所有数据访问代码的类。类中有两种方法可以将数据插入数据库。我想在 SqlTransaction 中登记这些插入,并在其中一个插入失败时回滚事务。但是,由于我编码的方式,我不确定该怎么做。这是我的数据访问代码:

我正在从我的 ASP.NET 页面访问该代码,如下所示:

我想要做的是将来自 ASP.NET 页面的调用包装在 SqlTransaction 中。做这个的最好方式是什么?我需要重构我的代码吗?

非常感谢。

0 投票
3 回答
1857 浏览

.net - 我什么时候应该使用 SQLTransaction

什么是使用 SQLTransaction 的合适时间?

我将它们用于我的所有INSERT、UPDATE 和 DELETE 语句。

这是正确的用法还是我有点矫枉过正?

0 投票
3 回答
3956 浏览

c# - 如何检查 Dotnet 事务是否回滚?

如何检查 dotnet 事务是否已关闭?

0 投票
3 回答
53784 浏览

sql-server - SQL SERVER - 了解 MIN(text) 如何工作

我正在做一些挖掘并寻找关于 SQL 服务器如何评估的解释MIN(Varchar)

我在 BOL 中找到了这个注释:MIN 找到底层数据库中定义的整理序列中的最小值

因此,如果我有一个表,其中一行具有以下值:

做 aSELECT MIN(DATA)会返回 AA。我只是想了解这背后的原因并更好地了解 BOL。

谢谢!

0 投票
1 回答
2627 浏览

sql - SQL 日志和活动事务

我有一个使用 SQL 2008 运行模拟 SQL 2005 数据库的 Web 服务器,并且我有一个用于测试环境的本地 SQL 2005 数据库。

这导致我使用脚本来备份/恢复数据以进行测试,因为 2008 服务器备份不会恢复到 2005 服务器。

当我在生产 Web SQL Server (2008) 上运行此 SQL 查询以减小表的大小时

我收到这条消息:

我有时也会在发布脚本时出现它。

当我运行此 SQL 命令时,我得到以下结果:

结果:

以下是我的问题和问题:

  1. 我明白了..我有一个需要回滚命令的事务语句

< if @@Trancount > 0 Rollback > .. 但我有 100 个存储过程,所以在我这样做之前....

  1. 与此同时......我怎样才能消除这个问题?我试过 SHRINKING 并尝试备份 Db ......

  2. 如您所见,它处于简单模式...我不知道如何备份 LOG ONLY 文件...(还没有找到如何做到这一点)...