无法从临时历史表中删除行

2024-01-11

我最近发现了 SQL Server 中的时态表。我想开始使用这个功能。然而,最大的障碍是无法从中删除记录。由于 GDPR 合规性,这是绝对必须的。

从历史表中删除记录显然会导致错误:

无法从临时历史表中删除行

因此,为了能够从历史表中删除记录,我必须禁用SYSTEM_VERSIONING,然后删除,然后重新启用SYSTEM_VERSIONING。除非还有另一种我不知道的方法?

因为不可能在存储过程中使用 GO/SqlCommand,如何确保删除历史记录不会干扰其他交易,例如从历史表中删除记录期间发送到临时表的更新是否仍会导致记录被添加到历史表中?

我尝试创建一个存储过程将其包装在一个事务中,但这失败了,因为ALTER TABLE声明禁用SYSTEM_VERSIONING尚未执行,导致相同的错误。

CREATE PROCEDURE [dbo].[OrderHistoryDelete]
     (@Id UNIQUEIDENTIFIER)
AS
BEGIN
    BEGIN TRANSACTION

    ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = OFF )
    -- No GO possible here obviously.

    DELETE FROM [dbo].[OrderHistory] WITH (TABLOCKX) 
    WHERE [Id] = @Id

    ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[OrderHistory]))

    COMMIT TRANSACTION
END
GO

如果您使DELETE动态的,您的存储过程将成功ALTER桌子,DELETE有问题的记录,然后ALTER回来了。

CREATE PROCEDURE [dbo].[OrderHistoryDelete]
     (@Id UNIQUEIDENTIFIER)
AS
BEGIN
    DECLARE @sql VARCHAR(MAX)

    BEGIN TRANSACTION

        ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = OFF )

        SET @sql = 'DELETE FROM [dbo].[OrderHistory] WITH (TABLOCKX) 
        WHERE [Id] = ''' + CAST(@Id AS VARCHAR(40)) + ''''
        EXEC (@sql)

        ALTER TABLE [dbo].[Order] SET ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[OrderHistory]))

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

无法从临时历史表中删除行 的相关文章

  • 如何处理用户界面中的数据库约束违规?

    我们使用存储过程在数据库中实现大部分业务规则 我永远无法决定如何最好地将数据约束违规错误从数据库传递回用户界面 我所说的约束更多地与业务规则相关 而不是与数据完整性相关 例如 诸如 无法插入重复的键行 之类的数据库错误与业务规则 不能有多个
  • SQL Server 2008 R2 的 Try_Convert

    我正在使用 SQL Server 2008 R2 并且有一个VARCHAR我想要转换为的列DECIMAL 28 10 using CONVERT 但其中许多行的格式错误 因此无法将它们解析为数字 在这种情况下 我只想通过将结果设置为 0 或
  • Visual Studio SSDT Data Compare如何比较单个数据库中的两个表

    尝试在 SSDT 中做一些简单的数据比较 但事实证明有点困难 在一个数据库中 我有两个要比较的表 这些表具有相同的架构 只是表名不同 我只是想看看这个工具是否能给我一个很好的方法来比较两者的数据 I e tblOutput tblOutpu
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • 设置 xact_abort 并尝试一起捕获

    我的 sp 中有一个 try catch 块 其中只有一条插入语句 catch 检查错误代码是否违反 pk 如果是则进行更新 但有时我得到 当前事务无法提交 并且无法支持写入日志文件的操作 回滚事务 在批处理结束时检测到不可提交的事务 事务
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 限制 SQL Server 连接到特定 IP 地址

    我想将 SQL Server 实例的连接限制为特定 IP 地址 我想阻止来自除特定列表之外的任何 IP 地址的任何连接 这是可以在 SQL Server 实例或数据库中配置的东西吗 听起来像是你会使用Windows防火墙 http tech
  • 如何在 SQL Server 中的特定字符后分割字符串并将该值更新到特定列

    我有包含数据的表格1 1 to 1 20在一列中 我想要值 1 到 20 即 前斜杠 之后的值更新到 SQL Server 中同一表中的其他列 Example 专栏有价值1 1 1 2 1 3 1 20新列值1 2 3 20 也就是说 我要
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 有没有办法以编程方式轻松更改多个 SSIS 包上的服务器名称?

    作为发布周期的一部分 我们正在创建多个 SSIS 包来迁移大型数据库 我们最终可能会得到大约 5 10 个 SSIS 包 由于我们有 4 个环境 开发 QA 登台 生产等 是否有一种有效的方法可以在每个 SSIS 包经历不同的服务器环境时更
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 如何在 SQL Server 存储过程中对用户定义的表类型执行 ForEach?

    XX PROCEDURE dbo XXX X dbo IntType readonly AS BEGIN SET NOCOUNT ON how can I foreach X here and do process individually
  • 在 SQL 2005+ 中,CLR 存储过程是否优于 TSQL 存储过程?

    我目前的观点是否定的 更喜欢 Transact SQL 存储过程 因为它们是重量更轻且 可能 性能更高的选项 而 CLR 过程允许开发人员进行各种恶作剧 然而最近我需要调试一些写得非常糟糕的 TSQL 存储过程 像往常一样 我发现许多问题是
  • C#的数组列表可以用来填充SSIS对象变量吗?

    我已在 C 脚本中填充了一个列表 并将其值分配给 SSIS 对象变量 然后 我使用该对象变量通过循环遍历 For every do 枚举器来执行一些 SQL 查询 我尝试通过 Foreach ado 枚举器执行此操作 但出现错误 X 变量不
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何获得顶部带有千位分隔符的数字?

    SELECT count FROM table A 假设结果是8689 我怎样才能将它转换为8 689在 SQL Server 上 尝试这样 select replace convert varchar convert Money coun
  • 在 SQL Server 中,如果主键是 GUID,如何按插入顺序对表行进行排序?

    我开始在主键中使用 GUID 而不是自动增量整数 然而 在开发过程中 我习惯于查询 从 SQL Management Studio 或 Visual Studio 数据库 以查看我的应用程序刚刚插入的记录 并且我对无法按主键 desc 顺序

随机推荐

  • 未找到 Xamarin 方法“CGSize..ctor”

    我刚刚更新了 xamarin studio 然后更新了我的 iOS 项目中的 xamarin forms 包 一切都构建得很好 但是当我尝试在模拟器中运行该应用程序时 出现以下错误 未找到方法 CGSize ctor 我创建了一个新的解决方
  • Laravel Blade 表单关闭问题

    我在 Laravel 中有一个这样的表单 div class modal body Form model questionGroup route gt question groups update questionGroup gt id m
  • 如何使用 uniqueId() jquery ui

    似乎 jquery ui 已加载 因为当我运行时 function did the UI load console log ui version JS控制台返回1 10 3 我正在使用宝石https github com joliss jq
  • Pandas 将 groupby 总和值分配给原始表中的最后一行

    例如 我有一张桌子 A id price sum 1 2 0 1 6 0 1 4 0 2 2 0 2 10 0 2 1 0 2 5 0 3 1 0 3 5 0 我想要的就像 最后一行sum应该是price一个团体的 id price sum
  • Asp.net 会员资格 - 帐户被锁定

    我们正在使用 ASP net 附带的标准 ASP net 会员功能 我们的会员数据库中的某些帐户将 锁定 标志设置为 true 这种情况何时 如何发生 在可配置的时间长度 passwordAttemptWindow 默认 10 分钟 内登录
  • JQuery FullCalendar 从 ajax 成功调用 rerenderEvents 时出现问题

    由于某种原因 我无法在 POST 后重新呈现日历 到那时一切都很顺利 calendar fullCalendar select function startDate endDate ajax url data php type POST d
  • 使用 Skip/Take 进行分页时 LINQ 查询性能极差

    我需要使用 LINQ 从 DB2 数据库查询记录 我有从数据库架构生成的实体 并尝试使用 Skip 和 Take 执行 LINQ 查询 基础表大约有 25 列 可能有 100 万条记录 当我在没有 Skip 的情况下执行查询时 大约需要 0
  • 反应式表单提交后显示错误消息

    在 Angular 8 Reactive 表单上 我有以下内容
  • phonegap 3.5.0 中缺少 Cordova jar

    在我使用phonegap 2 7 0之前 因此 对于phonegap更新 我使用node js安装了phonegap版本3 5 0 但在phonegap文件夹中没有cordova jar文件 如果我在 ADT 中创建一个项目 如何添加 co
  • VS2008 C++ 优化器有时会生成较慢的代码吗?

    继从上一个问题 https stackoverflow com questions 5165877 whole program optimization failing in vc2008 我一直在我的发布版本中尝试优化器设置 以了解使用编
  • 检测简单数值向量中的一个或多个拐点

    All 我正在寻找一种可靠的 无监督的方法来检测相对较短的向量中的变化点 考虑以下两个示例 v1 c 0 299584 0 314446 0 357783 0 388896 0 410417 0 427182 0 450383 0 4666
  • 使用 NVIDIA TensorRT 推理引擎运行 Tensorflow

    我想使用 NVIDIA TensorRT 来运行我的 Tensorflow 模型 目前 TensorRT 支持 Caffe prototxt 网络描述符文件 我无法找到将 Tensorflow 模型转换为 Caffe 模型的源代码 有什么解
  • 如何以编程方式关闭选择文件对话框

    我有一个输入字段type file选择图像文件 但我想要的是 如果有人打开文件选择器对话框 并且在某些特定事件中 它会自动 以编程方式关闭对话框 而无需用户点击取消按钮 有什么办法可以用js jquery来实现吗 互动
  • jquery 插件 Isotope 的回调

    我正在使用同位素 http isotope metafizzy co http isotope metafizzy co 具有可扩展的项目 我想使用 ScrollTo 以便我可以自动滚动到新扩展的项目 我首先尝试将回调与 reLayout
  • Spring @Value 无法识别 Interger 属性值

    我正在创建一个用于邮件服务配置的组件 gt gt Component PropertySource classpath mail properties public class Mail Value email config host pr
  • StackOverflow 中的 301 重定向。它是如何运作的? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们以这个问题的网址为例 http stackoverflow com questions 20306229 301 redirect i
  • PHP - Laravel Collection 或 Array 的类型提示

    我想创建一个接受任何可遍历对象作为参数的函数 例如 Laravel Collection Array 有没有办法在函数参数中输入提示这个条件 我希望在单一定义中实现以下两个效果 function test array traversable
  • Visual Studio 2010:关于“程序数据库管理器”的致命错误 C1902

    这是MSDN上的一些描述 错误信息 程序数据库管理器不匹配 请检查您的安装 程序数据库文件 pdb 是使用比编译时发现的版本更新的 mspdb80 dll 创建的 此错误通常表明 mspdbsrv exe 或 mspdbcore dll m
  • 替换池中表现不佳的工人

    我有一组无国籍的演员 执行类似的任务 这些工人中的每一个都是不可靠的并且可能表现不佳 在我的设计中 我可以轻松地产生更多演员来取代懒惰的演员 演员的演技是靠自己来评价的 有没有办法让主管 演员池进行此评估 以帮助决定哪些工作人员速度慢到足以
  • 无法从临时历史表中删除行

    我最近发现了 SQL Server 中的时态表 我想开始使用这个功能 然而 最大的障碍是无法从中删除记录 由于 GDPR 合规性 这是绝对必须的 从历史表中删除记录显然会导致错误 无法从临时历史表中删除行 因此 为了能够从历史表中删除记录