问题标签 [temporal-tables]

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 投票
0 回答
60 浏览

sql-server - 如何跟踪我的员工事实表的更新?

我有以下由 ID 组成的事实表:

如果我们有 EmployeeId=249 的 EmployeeStatus 更新和 EmployeeId=45 的 EmployeeType 更新,我的事实表应该如下所示:

在这种情况下我应该实施临时表吗?
如果我想添加一列来捕获更新的位置,例如我们更改了 EmployeeId=249 的 EmployeeStatus ,列更新将获得状态,我应该如何继续?
如果我使用时态表,如何将其用作 SSIS 中的 OLE DB 源来获取当前和历史记录?

0 投票
1 回答
122 浏览

sql-server - 在增量 ETL 期间缺少记录,并在时态表上长时间运行更新/插入

从时态表加载数据时,我们使用标准方法 - 通过将周期开始列值与最新加载时间戳进行比较来获取上次加载后发生的所有更改。

根据MSDN 文档(同样适用于更新和删除)

INSERTS:在 INSERT 上,系统根据系统时钟将 SysStartTime 列的值设置为当前事务的开始时间(在 UTC 时区),并将 SysEndTime 列的值分配为最大值 9999- 12-31。这会将行标记为打开。

假设我们在 开始一些长时间运行的事务2019-12-02 15:27:00,例如

我们最后一次加载是在2019-12-02 15:26:00。所以当我们运行 ETL 时,它会得到所有的修改:

SELECT * FROM dbo.accounts WHERE SysSstart > '2019-12-02 15:26:00'

让我们假设 ETL 完成2019-12-02 15:28:00并保存了该值。

由于我们延迟了 3 分钟,因此 UPDATE 完成于2019-12-02 15:30:00,但SysStart列值将2019-12-02 15:27:00与更新事务开始时一样。因此,如果我们再次运行 ETL,则不会加载此事务中更新的记录,因为它们与SysSstart > '2019-12-02 15:28:00'谓词不匹配。

如何处理这种情况?

0 投票
1 回答
2660 浏览

sql-server - 无法更改“表”,因为它被对象“谓词”引用-带有时间的 SQL Server RLS

我在我的 SQL Server 数据库中的临时表上使用行级安全性。为了遵守 GDPR,我不仅需要能够删除当前表中的这些数据,还要删除它的 _History 表(时态表)。

在RLS之前,我曾经这样做:

但是现在,这会产生错误:

在启用 RLS 的情况下启用和禁用系统版本控制的正确方法是什么?

0 投票
1 回答
87 浏览

sql-server-data-tools - 在 VS 2017 SSDT 中使用非默认文件组发布时态表时出错

我使用名为 [secondary] 的文件组。我正在使用 VS 2017 SSDT 最新版本。我正在尝试更改表格以使其成为临时表格。当我尝试使用 DB Compare 发布它时,出现错误。

严重性代码 描述 项目文件行抑制状态错误 SQL71567:文件组:[secondary] 不能在表上指定:“TableA_History”当有聚集索引时:在表上。

我究竟做错了什么?我需要单独创建历史表及其索引吗?

0 投票
2 回答
233 浏览

sql - 使用系统版本表选择值的开始和结束日期时间的 SQL 查询

基本上,我想使用系统版本表来找出所有用户在公司内担任职位的开始和结束日期。

我正在努力处理对记录所做的其他更改(Other创建新版本记录的字段更改)。我最初尝试 Group By UserId, CompanyIdPosition然后取 minSysStartTime和 max SysEndTime。乍一看确实有效。但是,如果将位置更改回其原始值,则它不起作用。

专注于UserId 1,他们是“助理”,然后是“经理”,然后又回到了“助理”。我想获得每个职位的开始和结束日期,而不管职位之间有多少Other变化。

我想要一个返回以下内容的查询:

谢谢

0 投票
0 回答
57 浏览

sql - SQL Server 临时表:我可以记录特定的更改吗?

我想知道是否可以在保留特定更改的 SQL Server 数据库上创建一个临时表。

例如,我有一个数据库,我想记录用户通过 SQL Server Management Studio 所做的任何插入/更新/删除操作,但我不想记录与数据库。

0 投票
1 回答
62 浏览

sql-server - SQL Server 临时表:我可以记录谁更改了什么?

有没有办法在临时表上记录更改记录的用户?任何解决方法?

0 投票
0 回答
84 浏览

sql-server - 我可以对临时当前表和历史记录中的字段应用唯一约束吗?

我们有一个身份验证系统,要求我们的任何客户以前都没有使用过新注册的电子邮件。我们的电子邮件表是临时的,因此在当前表和历史表之间,包含一个必须唯一的电子邮件列表。如果我可以在两者之间应用唯一约束,它将验证任何注册已使用电子邮件的尝试。

有没有办法用临时表做到这一点?

无法对系统版本化表的视图施加约束。

0 投票
2 回答
683 浏览

sql-server - 捕获删除临时表中行的用户

我了解时态表旨在为您提供数据的时间点视图。我正在使用临时表进行审计。我有以下时态表。

让我们假设这是临时表的当前状态:

我有一个使用 EF Core 的 Web 应用程序。我的 EF 代码总是将 设置ModifiedBy为当前登录的用户。我以身份登录应用程序bar@example.com并删除了一条 ID 为 2 的记录。SQL Server 将按预期自动将删除的记录插入历史记录表并保持 ModifiedBy 为,foo@example.com因为那是 ModifiedBy 列的时间点值。

但是现在系统不知道是谁删除了该行。在这种情况下bar@example.com,是实际删除该行的人。如何捕获删除记录的用户?我在这里有什么选择?

0 投票
3 回答
484 浏览

sql-server - efcore/时态表迁移处理

我和我的团队在后端开发中使用 .netcore/ef core/mssql。我们客户的要求之一是提供数据更改的历史记录。我们的第一种方法是查询历史相关主题的时态表。尽管我们可以弄清楚如何实现和查询时态表,但我们对在 db 模式更改中使用时态表有一些担忧。我们主要担心的是,几乎每个向上和向下迁移方法都必须通过大量自写的 SQL 代码进行扩展。有没有人在生产/开发中使用临时表并且可以提供有关迁移处理的见解?