为什么 SQL Server 2012 中的变量表回滚不起作用?

2023-12-06

我创建了一个变量表。在我的存储过程中,有很多事务。

现在,每当发生错误时,我想回滚特定事务,该事务包含一些从变量表中插入、更新或删除记录的语句。

这只是我的实际问题的一个例子:

declare @tab table (val int)

insert into @tab select 2
insert into @tab select 3
insert into @tab select 4

select * from @tab

begin tran
begin try
    update @tab set val = 1
    select 1/0;
    commit
end try
begin catch
    rollback
end catch

select * from @tab

Actual output :-
enter image description here

我的预期输出是:-

enter image description here

所以这里事务回滚不起作用。为什么它在这里不起作用?难道我做错了什么 ?


您没有使用temp表,您正在使用variable桌子。它们是有区别的。

临时表可以处理事务,而变量表则不能。看http://blog.sqlauthority.com/2009/12/28/sql-server-difference-temp-table-and-table-variable-effect-of-transaction/

如果您要更改变量表@tab到一个临时表#tab,你会得到你想要的行为。

临时表和变量表之间的区别:https://dba.stackexchange.com/questions/16385/whats-the-difference- Between-a-temp-table-and-table-variable-in-sql-server/16386#16386

我修改了我的问题。感谢您的知识分享。但问题仍然是一样的。为什么它不适用于变量表?

我上面发布的链接比我能提供的更详细。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 SQL Server 2012 中的变量表回滚不起作用? 的相关文章

  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 根据表sql中的行替换字符串中的字符

    我需要用一些映射的字符替换字符串中的字符列表 我有一个表 dbo CharacterMappings 有 2 列 CharacterToFilter 和 ReplacementCharacter 假设这个表中有3条记录 Filter Rep
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • MS Access (Jet) 事务、工作区

    我在提交事务 使用 Access 2003 DAO 时遇到问题 它的表现就好像我从未调用过 BeginTrans 我在 CommitTrans 上收到错误 3034 您尝试在未先开始事务的情况下提交或回滚事务 并且更改将写入数据库 大概是因
  • Oracle:使用SQL或PL/SQL查找动态SQL中的错误位置

    如何在 PL SQL 或 SQL 中找到动态 SQL 语句中的错误位置 从 SQL Plus 中 我看到了错误的位置 例如 无效的 SQL DML 语句 SYS orcl gt SELECT 2 X 3 FROM 4 TABLEX 5 TA
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • 单独的逗号分隔值并存储在sql server的表中

    我有一个存储过程 它将逗号分隔的值作为输入 我需要将其分开并需要将其作为单独的行存储在表中 令 SP 的输入为 Rule ID ListType ID Values 1 2 319 400 521 8465 2013 我需要将它存储在一个名
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • 如何获得顶部带有千位分隔符的数字?

    SELECT count FROM table A 假设结果是8689 我怎样才能将它转换为8 689在 SQL Server 上 尝试这样 select replace convert varchar convert Money coun
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型

随机推荐

  • 如何开始使用 Skobbler 跟踪 POI

    这是我用于创建可跟踪 POI 并启动 POI 跟踪的代码 该代码放置在我计算路线并开始导航之前 void createTrackablePOIs Go through the route array and create POIs out
  • 针对大动态响应进行断言

    我有一个非常大的响应数组 我想对其进行断言 但不知道顺序 我有一个具有预期响应值的变量 因此我可以进行一次巨大的比较 但我无法加载整个响应并同时将其与整个预期响应变量进行比较 def obligationsQuery Java type t
  • 与“iPad 2”失去连接

    我已经停止了所有模拟器进程 但仍然出现以下错误 恢复与 iPad 2 的连接并再次运行 APPNAME 或者如果 APPNAME 仍在运行 您可以通过选择 调试 gt 附加到进程 gt APPNAME 来附加到它 在 Xcode 6 中出现
  • 将位序列传递给文件 python

    作为较大项目的一部分 我想在文件中保存一系列位 以使文件尽可能小 我不是在谈论压缩 我想按原样保存序列 但使用最少的字符 最初的想法是使用 ASCII 编码将 8 位的迷你序列转换为字符并保存这些字符 但由于一些未知的奇怪字符问题 读取文件
  • 如何创建文本通道

    最近我一直在制作一个不和谐的机器人 我想在玩家输入命令后创建一个频道 gt report Tag Reason 以下是我尝试过的两种方法 其中一种来自之前的 StackOverflow 问题 但对我不起作用 function makeCha
  • MVC2.0中捕获HTML到字符串

    我是 MVC2 0 的新手 我使用下面的代码捕获 HTML 并将其作为字符串返回 但这在 MVC1 0 和 NET 3 5 框架中工作得很好 最近我将代码升级到 NET 4 0和MVC 2 0 现在这不再起作用并且上下文返回 null 当我
  • 没有“Access-Control-Allow-Origin”:读取 CSV、D3 [重复]

    这个问题在这里已经有答案了 我正在尝试从源读取 csvhttps stats oecd org Index aspx DataSetCode WILD LIFE 令 x 为上面的 url 但是 当我在本地主机上运行此脚本时 我收到以下消息
  • 调试 Android RuntimeException - 在我的代码执行之前

    我对 Java 并不陌生 但对 Android 平台却很陌生 我发现平台的缺点之一是对运行时崩溃的有意义的反馈 在应用断点的用户代码中很好 但我在第一次运行时发生崩溃 导致我的项目无法启动 并且我看不到追踪它的方法 任何人都可以阐明吗 Da
  • 应用程序特定信息:应用程序未能及时启动(iOS)?

    这是我的一份崩溃报告的顶部 Apple 是否规定了应用程序启动超时限制 如果是这样 有什么常见的解决方法吗 Elapsed total CPU time seconds 13 700 user 8 580 system 5 120 67 C
  • 在android中对字符串数组列表进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为的字符串数组列表names 如何按字母顺序对数组列表进行排序 ArrayList
  • 如何添加对 .NET MySQL 连接器的引用?

    这是什么意思 接下来添加对 MySql Data 的引用 实际上我已经下载了mysql连接器 net 请按照以下说明操作 首先 您需要安装mysql连接器 net 它位于 http dev mysql com downloads conne
  • 如何从 .net 中的框架外的 Webbrowser 控件检索 HTML (c#)

    我知道我可以通过以下方式获取 Webbrowser 控件的 HTML 源代码 HtmlDocument htmldoc webBrowser1 Document 但这只提供了 父页面 的html代码 如果网页使用框架 则不会返回包括框架在内
  • 我如何告诉 Moq 返回任务?

    我有一个接口声明 Task DoSomethingAsync 我使用 Moq 框架进行测试 TestMethod public async Task MyAsyncTest Mock
  • 如何使用 JAVASCRIPT 播放和暂停嵌入的 Spotify?

    有人可以解释一下如何播放和暂停这个 Spotify 嵌入对象吗 我试图找到该玩家的 ID 但找不到 URL https open spotify com embed podcast show 5iKz9gAsyuQ1xLG6MFLtQg 这
  • 在 AVX2 中重现 _mm256_sllv_epi16 和 _mm256_sllv_epi8

    我很惊讶地看到 mm256 sllv epi16 8 m256i v1 m256i v2 and mm256 srlv epi16 8 m256i v1 m256i v2 不在英特尔内联指南我没有找到任何解决方案来仅使用 AVX2 重新创建
  • 无法在 Ubuntu 上安装 Elastic Beanstalk CLI

    我正在尝试使用以下命令在新的 Ubuntu 14 04 在适用于 Windows 的 Linux 子系统上 上安装 Elastic Beanstalk CLI awsebcli sudo pip install awsebcli 但启动eb
  • 如何从文本文件列表中的单词中删除行?

    file1 gt word list txt gt 超过 1 000 000 行 file2 gt list txt gt 超过 1 000 000 行 我有一个包含单词列表的文件 我想从一个大文本文件中删除此文件中所有单词的所有出现 Ex
  • SQLSTATE[HY093] :插入 mysql 数据库期间的 pdo 语句

    这是我实现插入数据库的php代码
  • Android XML 对象序列化

    我想在 Android 中将对象序列化为 XML 有建议的库吗 PS 已经尝试过 XStream 但它无法在 Android 上正确序列化枚举 问题在这里 Android 中枚举的序列化问题 你有没有尝试过简单的http simple so
  • 为什么 SQL Server 2012 中的变量表回滚不起作用?

    我创建了一个变量表 在我的存储过程中 有很多事务 现在 每当发生错误时 我想回滚特定事务 该事务包含一些从变量表中插入 更新或删除记录的语句 这只是我的实际问题的一个例子 declare tab table val int insert i