无法更改“表”,因为它被对象“谓词”引用 - SQL Server RLS with Temporal

use*_*922 3 sql-server row-level-security temporal-tables

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

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

ALTER TABLE [dbo].[Table] SET (SYSTEM_VERSIONING = OFF);
DELETE FROM [dbo].[Table_History] WHERE UserID=@userID;
ALTER TABLE [dbo].[Table] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Table_History]));
Run Code Online (Sandbox Code Playgroud)

但现在,这会产生错误:

Cannot ALTER 'Table' because it is being referenced by object 'fn_Table_Predicate'.
Run Code Online (Sandbox Code Playgroud)

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

小智 5

我的情况

在更改引用另一个视图的视图时,我遇到了类似的问题。为了示例,我已重命名视图:

当试图改变我的观点 AAAAA 时,我收到了这条消息:

无法更改“AAAAA”,因为对象“BBBBB”正在引用它。

我的视图 BBBBB 是使用“WITH SCHEMABINDING”创建的

我如何解决它

所以我改变了我的观点 BBBBB 只是删除了“WITH SCHEMABINDING”(其余逻辑保持不变)。
然后我改变了我的看法AAAAA。
完成后,我改变了我的观点 BBBBB 再次添加“WITH SCHEMABINDING”

希望这可以帮助。