无法更改 'Table',因为它正被对象 'predicate' - SQL Server RLS with Temporal 引用
Cannot ALTER 'Table' because it is being referenced by object 'predicate' - SQL Server RLS with Temporal
我在 SQL 服务器数据库的临时 table 上使用行级安全性。为了遵守 GDPR,我不仅需要能够删除此 table 中从现在开始的数据,还需要能够删除其 _History table(时间 table)。
在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]));
但是现在,这会产生错误:
Cannot ALTER 'Table' because it is being referenced by object 'fn_Table_Predicate'.
在启用 RLS 的情况下启用和禁用系统版本控制的正确方法是什么?
我的情况
我在更改引用另一个视图的视图时遇到了类似的问题。为了示例,我重命名了视图:
当试图改变我的视图 AAAAA 时,我收到了这条消息:
Cannot ALTER 'AAAAA' because it is being referenced by object 'BBBBB'.
我的视图 BBBBB 是使用 "WITH SCHEMABINDING"
创建的
我是怎么解决的
所以我改变了我的观点 BBBBB,只是删除了 "WITH SCHEMABINDING"(其余逻辑保持不变)。
那我改观了AAAAA.
完成后,我改变了我的观点 BBBBB 再次添加 "WITH SCHEMABINDING"
希望对您有所帮助。
我在 SQL 服务器数据库的临时 table 上使用行级安全性。为了遵守 GDPR,我不仅需要能够删除此 table 中从现在开始的数据,还需要能够删除其 _History table(时间 table)。
在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]));
但是现在,这会产生错误:
Cannot ALTER 'Table' because it is being referenced by object 'fn_Table_Predicate'.
在启用 RLS 的情况下启用和禁用系统版本控制的正确方法是什么?
我的情况
我在更改引用另一个视图的视图时遇到了类似的问题。为了示例,我重命名了视图:
当试图改变我的视图 AAAAA 时,我收到了这条消息:
Cannot ALTER 'AAAAA' because it is being referenced by object 'BBBBB'.
我的视图 BBBBB 是使用 "WITH SCHEMABINDING"
创建的我是怎么解决的
所以我改变了我的观点 BBBBB,只是删除了 "WITH SCHEMABINDING"(其余逻辑保持不变)。
那我改观了AAAAA.
完成后,我改变了我的观点 BBBBB 再次添加 "WITH SCHEMABINDING"
希望对您有所帮助。