gpt4 book ai didi

sql-server - ADOQuery 正在绕过而不是删除触发器

转载 作者:行者123 更新时间:2023-12-03 15:58:47 25 4
gpt4 key购买 nike

我在这里使用的是 Delphi 5 和 SQL Server 2000。

我使用 INSTEAD OF DELETE 触发器在可更新 View 之上创建了一个 ADOQuery。

可更新 View 主要用于控制软删除。它会过滤掉标记为已删除的记录,并隐藏控制列。

当我向数据库发出直接 DELETE 命令时,一切正常。我删除 View 上的记录,并且基础表得到更新,按预期执行软删除。

当我尝试使用 ADOQuery 删除记录时,它会绕过 View 并直接删除基础表上的记录,因此 View 上的替代删除触发器永远不会被触发。

我还使用了引用约束,因此删除会出错,但我不知道这是否重要。向 View 发出删除命令时不会发生这种情况。

你们中有人知道如何解决这种恼人的行为吗?

最佳答案

注意到它是直接从主表中删除吗?这可能是因为它检测到它是一个 View 并使用基础表本身。为了防止这种情况,请声明您的 View WITH VIEW_METADATA,请参阅 ALTER VIEW了解更多信息。

然后 ADO 库会将 View 视为表。请注意,通过像这样欺骗数据库库,您可能会得到不需要的副作用,例如在未实际执行删除或执行更新而不是删除的情况下。

关于sql-server - ADOQuery 正在绕过而不是删除触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com